【问题标题】:Python Matplotlib: General Purpose Graphing with Twinx()Python Matplotlib:使用 Twinx() 进行通用绘图
【发布时间】:2017-11-28 16:11:55
【问题描述】:

我正在尝试使用 matplotlib 开发一个相当通用的图表,但不断收到错误 ValueError: left cannot be >= right。我的代码是:

def perf_plot(x, y, data, title = ''):
    import matplotlib.pyplot as plt
    import statsmodels.api as sm
    plt.style.use('ggplot')

    df = data

    if y == 'slope':
        z = 'bp01'
    else: 
        z = 'slope'

    y = df[y].astype(float)
    x = df[x].astype(float)
    z = df[z].astype(float)

    blue = '#348EA9'
    orange = '#F48B37'
    green = '#52BA9B'
    red = '#EF4846'

    fig, ax1 = plt.subplots()
    fig.suptitle(title, fontsize=14, fontweight='bold')
    fig.subplots_adjust(top=0.85)
    ax1.scatter(x ,y, color = orange)

    lowess_y = sm.nonparametric.lowess(y, x ,frac=0.1)
    ax1.plot(lowess_y[:, 0], lowess_y[:, 1], color = blue)
    ax1.set_ylabel(y, color = blue)
    ax1.set_xlabel(x, color = 'b')

    ax2 = ax1.twinx()
    lowess_z = sm.nonparametric.lowess(z, x, frac=0.1)
    ax2.plot(lowess_z[:, 0], lowess_z[:, 1], color = green)
    ax2.set_ylabel(z, color = green)

    fig.tight_layout()
    plt.show()
    return

经过一番谷歌搜索,我发现这个错误通常与tight_layout() 和标题的使用有关。删除标题并不能解决问题,但如果我删除了tight_layout,图形会打印,但两个轴都放在图形的左侧。关键是要做this 之类的事情,我真的不知道如何在没有tight_layout 的情况下获得决斗轴。想法?

错误代码:

perf_plot(x_, y_, df1)
Traceback (most recent call last):

  File "<ipython-input-149-36ff57804093>", line 1, in <module>
    perf_plot(x_, y_, df1)

  File "<ipython-input-148-ef2f325b64f9>", line 37, in perf_plot
    fig.tight_layout()

  File "C:\Users\user\AppData\Local\Continuum\Anaconda2\lib\site-packages\matplotlib\figure.py", line 1755, in tight_layout
    self.subplots_adjust(**kwargs)

  File "C:\Users\user\AppData\Local\Continuum\Anaconda2\lib\site-packages\matplotlib\figure.py", line 1620, in subplots_adjust
    self.subplotpars.update(*args, **kwargs)

  File "C:\Users\user\AppData\Local\Continuum\Anaconda2\lib\site-packages\matplotlib\figure.py", line 228, in update
    raise ValueError('left cannot be >= right')

ValueError: left cannot be >= right

【问题讨论】:

  • 问题的minimal reproducible example 怎么样?目前没有人可以运行代码。另外,说明正在使用的库的版本。
  • 库是最新的。没有人能运行代码吗?它相当完整。
  • 你会发现如果你复制代码并尝试运行它是行不通的,因为该函数没有在任何地方调用,并且完全不清楚应该放入什么数据。

标签: python matplotlib


【解决方案1】:

错误是由

引起的
y = df[y].astype(float)
x = df[x].astype(float)
z = df[z].astype(float)

在哪里

ax1.set_ylabel(y, color = blue)
ax1.set_xlabel(x, color = 'b')

使标签成为数据框。通过显着增加图形大小解决了这个问题:

fig, ax1 = plt.subplots(figsize=(8, 8)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 2018-05-26
    相关资源
    最近更新 更多