【问题标题】:Make more than one chart in same IPython Notebook cell在同一个 IPython Notebook 单元格中制作多个图表
【发布时间】:2013-04-29 20:45:05
【问题描述】:

我已经用

启动了我的 IPython Notebook
ipython notebook --pylab inline

这是我在一个单元格中的代码

df['korisnika'].plot()
df['osiguranika'].plot()

这很好用,它会画两条线,但在同一张图表上。

我想在单独的图表上绘制每条线。 如果图表彼此相邻,而不是一个接一个,那就太好了。

我知道我可以将第二行放在下一个单元格中,然后我会得到两个图表。但我希望图表彼此靠近,因为它们代表相同的逻辑单元。

【问题讨论】:

    标签: python pandas ipython ipython-notebook


    【解决方案1】:

    首先制作多个轴并将它们传递给 Pandas 绘图函数,例如:

    fig, axs = plt.subplots(1,2)
    
    df['korisnika'].plot(ax=axs[0])
    df['osiguranika'].plot(ax=axs[1])
    

    它仍然给你 1 个数字,但有两个不同的地块相邻。

    【讨论】:

    • 这是有效的。现在我不会改变图像的大小。我可以用 fig, axs = plt.subplots(1,2, figsize=(15, 5)) 做到这一点。有没有办法以像素为单位设置图像大小?
    • 使用 figsize 确实是这样,就是以英寸为单位的尺寸。多少像素取决于 dpi,它是固定在屏幕上显示的。但是为了保存它可以通过添加 dpi 关键字来设置。
    • 对于屏幕显示来说,dpi 是固定的并不十分准确(确实是不是)。 IPython 完全根据像素大小显示图像,并且像素大小在 matplotlib 中通过将图形大小(以英寸为单位)乘以 savefig.dpi 配置来确定。内联图形使用与写入文件相同的 savefig 路径。
    • 感谢您指出这一点,我不知道它是这样工作的。如果考虑到显示dpi(以及)会不会更方便,因为这很容易在图形创建时设置。对于 savefig.dpi,除了mpl.rcParams['savefig.dpi'] = 120,我不知道任何其他方式。对于显示 dpi,很多地方都有一个关键字,例如 plt.figure(dpi=120),但现在被忽略了,因此我错误地假设它已被修复。
    【解决方案2】:

    您也可以在每次绘图后调用 show() 函数。 例如

       plt.plot(a)
       plt.show()
       plt.plot(b)
       plt.show()
    

    【讨论】:

    • 很好,但是如何设置情节图片位置,比如(2,2)或(1,2)?
    • 使用此选项,图必须一个接一个地出现。要更好地控制整体布局,pyplot.subplots() 是要走的路。
    • 我删除了链接。
    【解决方案3】:

    另一种方式,多样化。虽然这比其他的灵活一些。不幸的是,这些图表一个在另一个之上,而不是并排显示,您在原始问题中确实要求这样做。但是非常简洁。

    df.plot(subplots=True)
    

    如果数据框有两个以上的系列,而您只想绘制这两个系列,则需要将 df 替换为 df[['korisnika','osiguranika']]

    【讨论】:

      【解决方案4】:

      我不知道这是否是新功能,但这将绘制在单独的数字上:

      df.plot(y='korisnika')
      df.plot(y='osiguranika')
      

      虽然这将绘制在同一个图上:(就像操作中的代码一样)

      df.plot(y=['korisnika','osiguranika'])
      

      我发现这个问题是因为我使用的是前一种方法并希望它们绘制在同一个图上,所以你的问题实际上是我的答案。

      【讨论】:

        【解决方案5】:

        类似这样的:

        import matplotlib.pyplot as plt
        ... code for plot 1 ...
        plt.show()
        ... code for plot 2...
        plt.show()
        

        请注意,如果您使用 seaborn 包进行绘图,这也将起作用:

        import matplotlib.pyplot as plt
        import seaborn as sns
        sns.barplot(... code for plot 1 ...) # plot 1
        plt.show()
        sns.barplot(... code for plot 2 ...) # plot 2
        plt.show()
        

        【讨论】:

          猜你喜欢
          • 2013-10-28
          • 2016-03-27
          • 1970-01-01
          • 2018-10-31
          • 1970-01-01
          • 2013-04-03
          • 1970-01-01
          • 2017-12-14
          相关资源
          最近更新 更多