使用千位分隔符和字体大小格式化 y 轴 matplotlib

Posted

技术标签:

【中文标题】使用千位分隔符和字体大小格式化 y 轴 matplotlib【英文标题】:Formatting y-axis matplotlib with thousands separator and font size 【发布时间】:2019-01-14 23:35:20 【问题描述】:

下面的代码有效。

名字 = 1960 - 2016 年

值 = 美国每年的 GDP

代码生成两个图表,但 y 轴标签从 5000 运行到 175000。我想 1) 使用 "," 格式化标签,作为千位分隔符,例如 5,000 或 17,500,以及,

2) 我想增加标签的字体大小 - 所以增加字体,例如 5000。

在网上找不到可行/可理解的示例。帮助表示赞赏。

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
import numpy as np
from numpy import array

# Plot GDP/Year

names =  usa.loc[: , "Year"]
values = usa.loc[: , "GDP Billions"]

plt.figure(1, figsize=(15, 6))
plt.suptitle('GDP Growth', fontsize=20)

plt.subplot(121)
plt.plot(names, values)
plt.xticks(np.arange(0, 57, step=5.0))
plt.ylabel('GDP', fontsize=16)
plt.title('United States',fontsize=16)

plt.subplot(122)
plt.plot(names, values)
plt.xticks(np.arange(0, 57, step=5.0))
plt.xlabel('Year', fontsize=16)
plt.title('United States',fontsize=16)

#plt.ticklabel_format(axis='y', style='sci', scilimits=(0, 4))
#print(plt.xticks())


plt.show()

【问题讨论】:

添加逗号:***.com/questions/25973581/… 增加字体大小:***.com/questions/3899980/… 我看到了那个,但不能让它太有用。我确实用代码解决了字体大小问题:plt.yticks(fontsize=12) 【参考方案1】:

1) 使用“,”来格式化标签,用于千位分隔符,例如 5,000 或 17,500,以及(如 How do I format axis number format to thousands with a comma in matplotlib?)

fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.get_yaxis().set_major_formatter(
matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))

2) 我想增加标签的字体大小 - 所以增加字体,例如 5000:

plt.rc('ytick', labelsize=5000) 

以下是您如何更改代码以合并这些解决方案(如评论中要求的那样):

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
import numpy as np
from numpy import array

plt.rc('ytick', labelsize=12) 

# Plot GDP/Year
names =  usa.loc[: , "Year"]
values = usa.loc[: , "GDP Billions"]


fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 6))

fig.suptitle('GDP Growth', fontsize=20)

ax1.plot(names, values)
ax1.set_xticklabels(np.arange(0, 57, step=5.0))
ax1.set_ylabel('GDP', fontsize=16)
ax1.set_title('United States',fontsize=16)
ax1.get_yaxis().set_major_formatter(
matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))

ax2.plot(names, values)
ax2.set_xticklabels(np.arange(0, 57, step=5.0))
ax2.set_ylabel('Year', fontsize=16)
ax2.set_title('United States',fontsize=16)
ax2.get_yaxis().set_major_formatter(
matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
#plt.ticklabel_format(axis='y', style='sci', scilimits=(0, 4))
#print(plt.xticks())


plt.show()

以下是我创建的虚拟数据的图:

【讨论】:

感谢,但不高兴。可能是因为我不知道该怎么做。如果我只是简单地剪切和粘贴并执行,我会收到错误:TypeError: 'AxesSubplot' object is not iterable。语法 ax.get。 . .我的代码中没有定义。我不知道如何包含它。如何从我的代码中访问 get_xaxis().set_major_formatter() 方法? plt.ticklabel_format(axis='y', style='sci', scilimits=(0, 4)) 似乎很有希望,但无法弄清楚如何获得数千的逗号分隔符。 @user3504322 看看我更新的答案。您需要在代码中更改的所有内容是将您的两个图定义为fig, (ax1, ax2) = plt.subplots(1, 2),您将可以通过ax1ax2 访问每个图的get_xaxis().set_major_formatter() 方法 我不知道该怎么做。我很无知。 检查我重新更新的答案!我添加了您需要合并到代码中的更改!

以上是关于使用千位分隔符和字体大小格式化 y 轴 matplotlib的主要内容,如果未能解决你的问题,请参考以下文章

将 y 轴标签格式化为具有许多零的更高千位科学记数法?

如何使用R中的绘图功能更改散点图中x轴和y轴标签的字体大小和颜色?

在ggplot2中更改轴文本的字体大小和方向

mySQL格式数字输出,千位分隔符

在python中使用本地化的千位分隔符和小数精度格式化数字

使用美元符号和千位分隔符格式化引导表 [关闭]