matplotlib中从右到左的水平条形图

时间:2018-09-25 16:50:39

标签: python matplotlib plot bar-chart

here提供的示例代码生成此图:

enter image description here

我想知道是否有可能绘制出完全相同但“镜像”的东西,像这样:

enter image description here

以下是提供的示例代码,以防链接停止工作:

Public Sub GetIconImage(control As IRibbonControl, ByRef image)     
  Dim sPicPath As String
  Dim stdPic As StdPicture

  sPicPath = "C:\Users\[userName]\Pictures\test.jpg"  'Schweiz.png"
  Set stdPic = stdole.StdFunctions.LoadPicture(sPicPath)
  Set image = stdPic
End Sub

2 个答案:

答案 0 :(得分:1)

您接近了,忘了放ax.invert_xaxis()。但是,您仍然在左侧y轴上分配了y标记。

要在右侧分配刻度线,您需要首先创建一个双x轴(右侧y轴)实例(此处为ax1),然后在其上绘制条形图。您可以通过传递[]来隐藏左侧的y轴刻度和标签。

我提出了两种解决方法(除了现在使用ax1代替ax之外,其余代码相同)

解决方案1 ​​

ax.set_yticklabels([]) # Hide the left y-axis tick-labels
ax.set_yticks([]) # Hide the left y-axis ticks
ax1 = ax.twinx() # Create a twin x-axis
ax1.barh(y_pos, performance, xerr=error, align='center',
    color='green', ecolor='black') # Plot using `ax1` instead of `ax`
ax1.set_yticks(y_pos)
ax1.set_yticklabels(people)

解决方案2(相同的输出):将图保持在左轴(ax)上,反转x轴,并在ax1上设置y-ticklabels

ax.invert_yaxis()  # labels read top-to-bottom
ax.invert_xaxis()  # labels read top-to-bottom

ax2 = ax.twinx()
ax2.set_ylim(ax.get_ylim())
ax2.set_yticks(y_pos)
ax2.set_yticklabels(people)

enter image description here

答案 1 :(得分:0)

另一种方法是简单地在x轴上设置反向限制,如下所示:

ax.set_xlim(14,0)