【发布时间】:2015-04-01 06:39:41
【问题描述】:
我应该如何将文本标签与图中的 x 行情对齐?我正在使用 host.set_xticklabels(labels,rotation='vertical') ,但这似乎不起作用。 我的标签是句子,有些可能比其他的更小/更大,例如“木乃伊归来第 2 部分”-如何在 x 轴下方填充一个空间以适应这个?
from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
path='/home/project/df.csv'
df=pd.read_csv(path,sep=',',header='infer')
xs =range(0,101)
ys =list(df['B'].ix[0:100])
zs=list(df['C'].ix[0:100])
ws=list(df['D'].ix[0:100])
if 1:
host = host_subplot(111, axes_class=AA.Axes)
p1, = host.plot(xs, ys, label='B')
plt.subplots_adjust(right=0.75)
par1 = host.twinx()
par2 = host.twinx()
offset = 60
new_fixed_axis = par2.get_grid_helper().new_fixed_axis
par2.axis["right"] = new_fixed_axis(loc="right",
axes=par2,
offset=(offset, 0))
par2.axis["right"].toggle(all=True)
host.set_xlim(min(xs), max(xs))
host.set_ylim(100, max(ys))
host.set_xlabel("A")
host.set_ylabel("B")
par1.set_ylabel("C")
par2.set_ylabel("D")
p2, = par1.plot(xs, ws, label='C',color='red')
p3, = par2.plot(xs, zs, label='D',color='green')
for tl in par1.get_yticklabels():
tl.set_color('red')
for tl in par2.get_yticklabels():
tl.set_color('green')
for tl in par1.get_yticklabels():
tl.set_color('r')
for tl in par2.get_yticklabels():
tl.set_color('g')
host.legend()
host.axis["left"].label.set_color(p1.get_color())
par1.axis["right"].label.set_color(p2.get_color())
par2.axis["right"].label.set_color(p3.get_color())
start, end, stepsize=0,len(df)-1,3
host.xaxis.set_ticks(np.arange(start, end, stepsize))
labels=list(df['A'])[0::stepsize]
host.set_xticklabels(labels,rotation='vertical')
plt.tight_layout()
plt.draw()
plt.show()
我需要对齐图中的“黑色”块。
我尝试了此处示例中的建议 python rotate values on xaxis to not overlap - plt.xticks(x, labels, rotation='vertical') 等,但没有奏效。
编辑 -: 从下面 Kazemakaze 的反馈中,这是我尝试过的 - : f,host=plt.subplots() #host = host_subplot(111, axes_class=AA.Axes) 但我也必须调整其余代码。你能提供一个双轴的例子吗?
我正在调整我的代码以适应 Secondary axis with twinx(): how to add to legend? 并且现在可以旋转,需要一些辅助轴上的指针。
【问题讨论】:
-
在您的图片中很难看到 - 标签是否无法正确旋转?
-
好吧,当我绘制它们时说标签[0:10] - 无论旋转如何,我都看到它们都在一条直线上 - 你可以用随机样本数据试试这个。我可以给你一个帖子编辑标签的文本。
-
尝试使用示例标签 - [“木乃伊归来”、“lila”、“ringa ringa roses”、“多么美好的一天”]*10 [或任何随机数据中的记录数]
-
我可以重现您的问题。似乎旋转不适用于
host_subplot。使用plt.subplotinstead 时它可以正常工作。 -
@kazemakase 请具体一点,或者我可以测试然后接受它。还将我的编辑添加为上面的 cmets
标签: python matplotlib pandas