matplotlib 如何在pyplot图上使用千位分隔符

guicsvcw  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(208)

我正在绘制图表,但是y轴上的值达到了175000。当然,python和pyplot默认不使用千位分隔符。图表必须按照格式规则放入文章中。因此我使用 rc 库来拥有一个serif字体,并且允许使用latex。2但是规则也要求一个千位分隔符。我正在从数据框中绘制图表,并找到了答案,我可以在整个数据框中包含逗号千位分隔符。然后我可以使用.replace()将逗号替换为空格。但问题是,当我的 Dataframe 中有千位分隔符时,我的图表不会显示。内核只是继续运行,没有任何图表作为输出。
所以我的问题是,有没有办法引入空格千位分隔符,然后用Pyplot将其绘制出来?最好是这样的一行或两行代码,我可以将其应用于整个 Dataframe ,而不是必须一次应用于一列,但任何解决方案都将受到赞赏。
附件是我的代码。

import numpy as np
import pandas as pd
from matplotlib import pyplot as pp
%matplotlib inline
from matplotlib import rc
rc("text", usetex=True)
rc("font", family="serif")
sketsverhouding = 4 / 5
vol = 5, 5*sketsverhouding
half = 3, 3*sketsverhouding
derde = 2.3, 2.3*sketsverhouding

下面是用于获取整个数据框中逗号分隔符的代码,它不能用图形表示。

data = pd.read_excel(r"C:\Users\pivde\Desktop\Tuks\nagraads\karakterisering\xrd\sifeksp_filament.xlsx", sheet_name = "python_data")
data = data.applymap(lambda x: f'{x:,d}' if isinstance(x, int) else x)

但是如果我用这个代替

data = pd.read_excel(r"C:\Users\pivde\Desktop\Tuks\nagraads\karakterisering\xrd\sifeksp_filament.xlsx", sheet_name = "python_data")

我可以正常地绘制图表,但是它们没有千位分隔符。我的绘图函数如下所示,其中有两行数据。

def skets(y, etiket):
    pp.figure(figsize=half)
    pp.plot(data['2theta'], data[y], 'k-')
    pp.xlabel(r'2$\theta$ [$^\circ$]')
    pp.ylabel('Intensity')
    pp.tight_layout()
    pp.ylim(0, 15000)
    pp.savefig(naam.format(etiket))

naam = 'grafieke/xrd_sifekpsfil_{:03.0f}ldh_pla.svg'
skets('n', 0)
skets('t', 2)

我不能附上excel文件与数据,所以我附上了一个简化的数据集,为您提供方便,有足够的数据来说明这一点。

2theta = [4.998436247,10.63245752,20.27627772,30.37691046,40.62981404,50.83196067,61.08486426,70.01808718]
n = [6090,1387,6762,3178,2865,2121,1354,1243]
t = [6146,2266,8610,4012,3424,2390,1572,1355]
k5hmc34c

k5hmc34c1#

一种方法是使用format()函数添加,,然后使用replace将其更改为空格。我已经在下面的代码中完成了这一操作,它将独立运行。希望这是您正在寻找的...

theta = [4.998436247,10.63245752,20.27627772,30.37691046,40.62981404,50.83196067,61.08486426,70.01808718]
n = [6090,1387,6762,3178,2865,2121,1354,1243]
t = [6146,2266,8610,4012,3424,2390,1572,1355]
import numpy as np
import pandas as pd
from matplotlib import pyplot as pp
%matplotlib inline
import matplotlib as mpl
mpl.rcParams.update(mpl.rcParamsDefault)
from matplotlib import rc
#rc("text", usetex=True)
rc("font", family="serif")
sketsverhouding = 4 / 5
vol = 5, 5*sketsverhouding
half = 3, 3*sketsverhouding
derde = 2.3, 2.3*sketsverhouding

def skets(y, etiket):
    pp.figure(figsize=half)
    pp.plot(theta, n, 'k-')
    pp.xlabel(r'2$\theta$ [$^\circ$]')
    pp.ylabel('Intensity')
    pp.ylim(0, 15000)
    labels = pp.gca().get_yticks()
    pp.gca().get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, p: '{:,}'.format(x).replace(',', ' ')))
    
skets('n', 0)

输出图

相关问题