如何在barh中扩展y刻度的空间 - python matplotlib

时间:2015-10-06 12:57:24

标签: python matplotlib

请参阅附图

enter image description here

我在python中有如下源代码

def plotBarChartH(self,data):
           LogManager.logDebug('Executing Plotter.plotBarChartH')

           if type(data) is not dict:
               LogManager.logError('Input data parameter is not in right format. Need a dict')
               return False

           testNames = []
           testTimes = []

           for val in data:
                testNames.append(val)
                testTimes.append(data[val])

           matplotlib.rcParams.update({'font.size': 8})     
           yPos = np.arange(len(testNames))
           plt.barh(yPos, testTimes, height=0.4, align='center', alpha=0.4)
           plt.yticks(yPos, testNames)
           plt.xlabel('time (seconds)')
           plt.title('Test Execution Times')
           savePath = os.path.join(ConfigurationManager.applicationConfig['robotreportspath'],'bar.jpg')
           plt.savefig(savePath)
           plt.clf()
           return True

酒吧看起来很好,但我有两个问题

  1. 如何才能完整显示y轴上的文字?我的意思是一些文字是截止的,我想扩大占用的空间,以便它可以完整显示。

  2. 我可以增加绘制图表的整个绘图区域吗?我想增加绘图区域的宽度,使图像看起来更大

  3. 感谢

4 个答案:

答案 0 :(得分:4)

使用Figure plt.tight_layout()`创建plt.figure(figsize=(width,height)), and call对象时,可以明确设置图形大小(以英寸为单位),以便为您的刻度标签腾出空间,如下所示:

import matplotlib.pyplot as plt

names = ['Content Channels','Kittens for Xbox Platform','Tigers for PS Platform',
         'Content Series', 'Wombats for Mobile Platform']

values = [260, 255, 420, 300, 270]

fig = plt.figure(figsize=(10,4))
ax = fig.add_subplot(111)
yvals = range(len(names))
ax.barh(yvals, values, align='center', alpha=0.4)
plt.yticks(yvals,names)
plt.tight_layout()

plt.show()

enter image description here

答案 1 :(得分:1)

  1. 一种选择是在字符串中添加换行符"\n".join(wrap(longstring,60)(或使用fig.subplots_adjust(left=0.3)中的import matplotlib.pyplot as plt import numpy as np val = 1000*np.random.rand(5) # the bar lengths pos = np.arange(5)+.5 # the bar centers on the y axis name = ['name','really long name here', 'name 2', 'test', 'another really long \n name here too'] fig, ax = plt.subplots(1,1) ax.barh(pos, val, align='center') plt.yticks(pos, name) fig.subplots_adjust(left=0.3) plt.show() 作为this的答案)。 您可以使用figsize调整绘图区域以确保显示整个字符串
  2. 示例:

    fig, ax = plt.subplots(1,1, figsize=(12,8))
    

    给出了

    enter image description here

    1. 您可以使用ax.set_xlim((0,800)) 参数调整物理图形大小以显示子图或图。
    2. 示例:

      ax.set_xlim((0,data.max()+200))

      可以通过根据数据设置轴来调整图中的空间量,

      ```{r, results='asis', echo=FALSE}
      Series.title <- c("Group 1", "Group 2", "Group 3")
      Series.quarter <- "SQ?"
      
      for (i in 1:3) {
          cat(sprintf("%s %s Quarters Forecast \n\n", Series.title[i], Series.quarter))
          for (j in 1:3) {
              cat(sprintf("![](graph%i-%i.png) \n", j, i))
          }
      }
      ```
      

      或使用Group 1 SQ? Quarters Forecast ![](graph1-1.png) ![](graph2-1.png) ![](graph3-1.png) Group 2 SQ? Quarters Forecast ![](graph1-2.png) ![](graph2-2.png) ![](graph3-2.png) Group 3 SQ? Quarters Forecast ![](graph1-3.png) ![](graph2-3.png) ![](graph3-3.png) 进行自动化。

答案 2 :(得分:1)

  1. 如何才能完整显示y轴上的文字?我的意思是一些文字是截止的,我想扩大占用的空间,以便它可以完整显示。
  2. 您可以使用plt.axes来控制轴的绘制位置,这样您就可以在左侧区域留出更多空间。一个例子可能是plt.axes([0.2,0.1,0.9,0.9])

    1. 我可以增加绘制图表的整个绘图区域吗?我想增加绘图区域的宽度,使图像看起来更大
    2. 我不明白你的意思。

      • 您可以使用plt.figure(例如plt.figure(figsize = (6,12))
      • 来控制数字的大小
      • 您可以使用plt.[xy]lim控制信息与轴之间的空间。例如,如果您想在右侧区域中留出更多空白,则可以使用plt.xlim(200, 600)
      • 您可以使用plt.axes保存一些保证金空间(参见上面的问题1)。

答案 3 :(得分:1)

截至2020年:只需在plt上调用.autoscale即可:

您可以在plt.show()

之前执行此操作
plt.autoscale()

OR

plt.autoscale(enable=True, axis='y', tight=None)