我試圖讓我的x軸看起來就像這樣:堆疊標籤和matplotlib加入seperations軸
所以就有了「副標題」爲一組蜱,和我可以添加的分色。是否有可能在matplotlib中做到這一點?如果沒有,是否有另一種工具?
的例子是由吳,莉莎等人服用。 「Q100:數據庫處理單元的架構和設計。」 ACM SIGPLAN公告49.4(2014):255-268。
我試圖讓我的x軸看起來就像這樣:堆疊標籤和matplotlib加入seperations軸
所以就有了「副標題」爲一組蜱,和我可以添加的分色。是否有可能在matplotlib中做到這一點?如果沒有,是否有另一種工具?
的例子是由吳,莉莎等人服用。 「Q100:數據庫處理單元的架構和設計。」 ACM SIGPLAN公告49.4(2014):255-268。
首先,感謝達里爾您發表評論!我試過你的解決方案,但它似乎有點太複雜。另外,我不一定要對稱地畫線。
無論如何,我想到了另外一個辦法......我躲在所有的蜱,並增加了額外的蜱長度大。我將新的滴答定位在常規滴答之間,所以我得到了我想要的線。
對於我用過的標籤xlabel對齊到右側,只是用空格將標籤對齊到所需的位置。這裏不是最好的解決方案,但它工作。
它看起來是這樣的:
# Modify the ticks parameters
plt.tick_params('x', bottom='on', length=80, width=1, which='major', direction='out')
# Hide all ticks
xticks = ax.xaxis.get_major_ticks()
for tick in xticks:
tick.tick1On = False
# Calculate additional tick marks positions
t_list = list(ax.get_xticks())
t1 = (t_list[5] + t_list[4])/2
t2 = (t_list[7] + t_list[6])/2
t3 = (t_list[13] + t_list[12])/2
# Add ticks
ax.set_xticks(list(ax.get_xticks()) + [t1, t2, t3])
# Make the ticks visible
xticks = ax.xaxis.get_major_ticks()
xticks[15].tick1On = True
xticks[16].tick1On = True
xticks[17].tick1On = True
# Position the labels
plt.xlabel('L1 L2 ', fontsize=14, labelpad=10, horizontalalignment='right', x=1.0)
我採取了一個刺,這個技巧是創建一個透明的疊加軸,我可以用它來繪製xaxis和3個貓標籤附近的豎條。希望有人比我更聰明,想出更優雅的東西!
import matplotlib.pyplot as plt
from matplotlib import lines
labels = ['LowPower Design', 'Pareto Design', 'HighPerf Design']
cats = ['q14', 'q19', 'q8', 'q6', 'q17', 'q7', 'q5', 'q15', 'q4', 'q1', 'q3',
'q16', 'q18', 'q21', 'q2', 'q20', 'q10', 'q11']
fig = plt.figure(figsize=(10, 4))
ax = plt.axes([0.1, 0.2, 0.8, 0.7])
ax.set_xlim(0.5, len(cats) * 3 + 0.5)
ax.set_xticks(range(1, len(cats) * 3 + 1))
ax.set_xticklabels(cats * 3, rotation=90)
# new transparent axis
ax2 = plt.axes([0, 0, 1, 1], facecolor=(1, 1, 1, 0))
pos = ax.get_position()
deltax = pos.width/3.
for i in range(4):
xpos = pos.x0 + deltax * i
line = lines.Line2D([xpos, xpos], [0.2, 0.05], lw=2., color='k')
ax2.add_line(line)
if i < 3:
ax2.text(xpos + deltax/2., 0.05, labels[i], ha='center')
fig.savefig('test.png')