我试图使用同一图中另一个子图中的xticklabels设置第二个x轴:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(1,2)
ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])
ax1.plot([1,2,3,4,5],[1,2,3,4,5])
ax2.plot([4,5,6,7,8],[1,2,3,4,5])
ax3 = ax2.twiny()
ax3.set_xticklabels(ax1.get_xticklabels())
plt.show()
然后,得到的图给出了matplotlib.text对象的文本表示:
任何想法在这里出了什么问题? 谢谢!
答案 0 :(得分:0)
get_xticklabels
返回Text
个对象的列表,但set_xticklabels
需要一个字符串列表。正如您所写的那样,您只需获取Text
对象的文本表示,而不是标签本身的文本。在调用Text
之前,您需要从set_xticklabels
对象列表中提取标签列表
现在,如何获取字符串列表取决于ax1
上的xtick标签是自动分配的刻度标签还是自定义字符串。如果您使用自动标签,那么您需要获取轴的Formatter
并将刻度转换为字符串以传递给set_xticklabels
# Get the formatter which determines the way that they are displayed
formatter = ax1.get_xaxis().get_major_formatter()
# Convert each xtick to it's string representation using the formatter
labels = [formatter.format_data(x) for x in ax1.get_xticks()]
# Update the labels on your other axes
ax3.set_xticklabels(labels)
如果它们已经是自定义字符串,那么您可以执行以下操作:
ax3.set_xticklabels([t.get_text() for t in ax1.get_xticklabels()])
您也可以自己指定格式
ax3.set_xticklabels(['%d' % x for x in ax1.get_xticks()])
答案 1 :(得分:0)
根据此ticklabel交换的目的,复制ticks本身而不是ticklabel可能就足够了。
ax3.set_xticks( ax1.get_xticks() )
如果同时复制轴限制
,这可能特别合适ax3.set_xlim( ax1.get_xlim() )