gpt4 book ai didi

python - 强制 matplotlib 仅显示 Y 轴上从 0 开始的正数

转载 作者:太空宇宙 更新时间:2023-11-03 15:10:26 25 4
gpt4 key购买 nike

在一个循环中,我使用 Matplotlib 创建了一些子图。

我注意到在某些情况下,Y 轴(尤其是显示 0 时)在 Y 轴上显示一些负数。

是否有一个参数强制Y轴显示正数(即从0向上。

还有一个参数,用于使 Y 轴值保留一位或没有小数位。 (显示 2 而不是 2.0 或 2.00(它似乎根据数据自动执行)。

代码:

for a in account_list:
f = plt.figure()
f.set_figheight(20)
f.set_figwidth(20)
f.sharex = True
f.sharey=True

left = 0.125 # the left side of the subplots of the figure
right = 0.9 # the right side of the subplots of the figure
bottom = 0.1 # the bottom of the subplots of the figure
top = 0.9 # the top of the subplots of the figure
wspace = 0.2 # the amount of width reserved for blank space between subplots
hspace = .8 # the amount of height reserved for white space between subplots
subplots_adjust(left=left, right=right, bottom=bottom, top=top, wspace=wspace, hspace=hspace)

count = 1
for h in headings:
sorted_data[sorted_data.account == a].ix[0:,['month_date',h]].plot(ax=f.add_subplot(7,3,count),legend=True,subplots=True,x='month_date',y=h)

import matplotlib.patches as mpatches
legend_name = mpatches.Patch(color='none', label=h)
plt.xlabel("")
ppl.legend(handles=[legend_name],bbox_to_anchor=(0.,1.2,1.0,.10), loc="center",ncol=2, mode="expand", borderaxespad=0.)
count = count + 1

enter image description here

编辑

当我使用以下设置 Y 轴的最小值和最大值时:我最终得到了重复的数字。例如,过去 Y 轴上的绘图:1、1.5、2、2.5 现在只有 1、1、2、2、3、3,(我希望每个数字只出现一次。

也许这与我的 if 语句不起作用有关。我希望所有最大 Y 轴值小于 10 的图都将其最大 Y 值设置为 10。

#set bottom Y axis limit to 0 and change number format to 1 dec place.
axis_data = f.gca()

from matplotlib.ticker import FormatStrFormatter
axis_data.yaxis.set_major_formatter(FormatStrFormatter('%.0f'))

#set only integers on Y axis >>>
import matplotlib.ticker as ticker
axis_data.xaxis.set_major_locator(ticker.MaxNLocator(integer=True))

#if y max < 10 make it ten
ymin,ymax = axis_data.get_ylim()
print(type(ymax))

if ymax <10:
axis_data.set_ylim(bottom=0.,top=ymax)
else:
axis_data.set_ylim(bottom=0.)

enter image description here

最佳答案

ax.set_ylim是改变子图 y 轴范围的方法。为了使用它,您必须拥有一个 Axes 实例(由 plt.subplot 返回的实例);那么您可以将下限设置为 0。按照这些思路应该可以工作:

ax = plt.subplot(1, 1, 1)
ax.plot(x, y)
ax.set_ylim(bottom=0.)
plt.show()

要更改刻度标签格式,一种方便的方法是使用 FormatStrFormatter :

from matplotlib.ticker import FormatStrFormatter
ax.yaxis.set_major_formatter(FormatStrFormatter('%.1f'))

编辑:我看过你的代码;你可以用 fig.gca() 得到一个 Axes 实例方法,然后如上所述设置 ylim 和 major_formatter。

编辑 2:解决的问题可以通过指定 ticks locator 来解决注释。 .默认使用的定位器是 AutoLocator ,本质上是具有默认值的 MaxNLocatorMaxNLocator取的关键词之一是 integer,它仅指定刻度的整数值,默认情况下为 False。因此,要使刻度仅采用整数值,您需要使用 integer=True 为 y 轴定义 MaxNLocator。这应该有效:

from matplotlib.ticker import MaxNLocator
ax.yaxis.set_major_locator(MaxNLocator(integer=True))

EDIT3:

如果您想将 y 上限设置为 10,则应明确将其设置为 10:

if ymax < 10:
axis_data.set_ylim(bottom=0., top=10.)
else:
axis_data.set_ylim(bottom=0.)

关于python - 强制 matplotlib 仅显示 Y 轴上从 0 开始的正数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27477974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com