在循环中,我使用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
修改
当我使用以下设置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.)
答案 0 :(得分:2)
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。
<强> EDIT2 强>:
问题在于它可以通过指定ticks locator来解决注释。默认情况下使用的定位器为AutoLocator
,基本上是MaxNLocator
的默认值。 MaxNLocator
采用的关键字之一是整数,它仅指定刻度的整数值,默认为False
。因此,要使得刻度仅采用整数值,您需要使用MaxNLocator
为y轴integer=True
定义。这应该有效:
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.)
答案 1 :(得分:1)
轴范围可以被xlim()
或ylim()
限制在特定范围内,例如
ylim([0,2])
可以使用xticks()
或yticks()
手动将轴刻度设置为任何字符串,例如
yticks([0,1,2],["0","1","2"])
答案 2 :(得分:1)
不幸的是,有许多方法可以调整滴答声。所以它有时会变得一团糟。
尝试:
tickpos = [1,2,5]
py.axis(ymin = 0)
py.yticks(tickpos,tickpos)
如果你不在两个参数中使用tickpos并使用两个不同的数组,则第一个数组表示滴答的位置。第二个说明标签是什么。如果你想让标签成为一个字符串(比如说它是一个条形图,你希望标签是给定条形的类别),这很有用。如果您将它们作为数字,这是非常危险的,因为您可能会发现您移动了刻度位置,而不是标签。因此,您将位置y = 4标记为,例如,6。以下将是BAD
py.yticks([1,2,3], [1, 4, -1]) #DO NOT DO THIS
您也可以设置 py.axis(ymin = 0,ymax = 4,xmin = 3) 或其他变体取决于您希望py可以自由设置的限制。作为注释,如果我想确定y = 4处的刻度出现,有时我会设置ymax = 4.000001。