【问题标题】:Create Plots in Matplotlib在 Matplotlib 中创建绘图
【发布时间】:2020-07-20 14:06:58
【问题描述】:

python 新手并尝试在 matplotlib 中创建一些图。我的示例数据如下:

df = pd.DataFrame(
    {
        "Date": ["13/07/2020", "13/07/2020", "13/07/2020", "13/07/2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020"],
        "MasterCategory": ["X", "X", "X", "X", "X", "X", "X", "X", "X", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "X", "X", "X", "X", "X", "X", "X", "X", "X", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y"],
        "Name": ["sddf", "sdasd", "fdf", "hfh", "rt", "rt", "ter", "ret", "ret", "gh", "fhgf", "r6", "gfh", "etr", "ert", "ery", "yeet", "hfh", "dth", "e", "eryru", "yu", "utyut", "yuy", "uyu", "uyu", "jy", "jyt", "e", "ter", "yeet", "yrt", "y", "yt", "ter", "ytr", "utr", "uru"],
        "SubCategory": ["A", "A", "A", "B", "B", "B", "B", "B", "C", "D", "D", "D", "E", "E", "F", "F", "F", "F", "F", "A", "A", "A", "B", "B", "B", "B", "B", "C", "D", "D", "D", "E", "E", "F", "F", "F", "F", "F"],
        "Age": [24, 35, 23, 34, 5, 56, 65, 44, 64, 24, 35, 23, 34, 5, 56, 65, 44, 64, 45, 21, 19, 34, 34, 3, 40, 48, 37, 70, 20, 35, 23, 34, 5, 56, 65, 44, 64, 45],
        "Exp": [3, 4, 5, 7, 0, 12, 34, 13, 45, 3, 4, 5, 7, 0, 12, 34, 13, 45, 18, 3, 4, 5, 7, 0, 12, 34, 13, 45, 3, 4, 5, 7, 0, 12, 34, 13, 45, 18],
    }
)

我的要求是我想创建与 MaterCategory 一样多的数字,并且每个数字将包含与具有两列的 SubCategory 一样多的行。第一个图包含前一周到当前周的每个名称的计数SubCategory 然后第二个图将包含 Age 和 Experience 的散点图,其中色调为 SubCategory 仅适用于最近一周。

情节应该是动态的,因为可以在适当的时候添加 MasterCategory 和 SubCategory,并且可以为现有的 MaterCategory 和 SubCategory 添加带有 Age 和 Exp 的名称

我一直在尝试编写下面的代码,首先动态找到 MasterCategory,然后是图中的轴数。

dfmastercategory = df['MaterCategory'].unique()
dfsubcategory= df['SubCategory'].unique()
for i in dfmastercategory:
print(f'fig{i}, axis=plt.subplot({len(dfsubcategory)},2,figsize=(5,5))')
for i in dfmastercategory:
    for row in range(len(dfsubcategory)):
        for column in range(2):
            print((f'fig{i} , {row} , {column}'))

以上至少让我知道有 2 个主要类别和 6 个子类别。下面是我得到的输出。

figX, axis=plt.subplot(6,2,figsize=(5,5))
figX , 0 , 0
figX , 0 , 1
figX , 1 , 0
figX , 1 , 1
figX , 2 , 0
figX , 2 , 1
figX , 3 , 0
figX , 3 , 1
figX , 4 , 0
figX , 4 , 1
figX , 5 , 0
figX , 5 , 1
figY , 0 , 0
figY , 0 , 1
figY , 1 , 0
figY , 1 , 1
figY , 2 , 0
figY , 2 , 1
figY , 3 , 0
figY , 3 , 1
figY , 4 , 0
figY , 4 , 1
figY , 5 , 0
figY , 5 , 1
figY, axis=plt.subplot(6,2,figsize=(5,5))
figX , 0 , 0
figX , 0 , 1
figX , 1 , 0
figX , 1 , 1
figX , 2 , 0
figX , 2 , 1
figX , 3 , 0
figX , 3 , 1
figX , 4 , 0
figX , 4 , 1
figX , 5 , 0
figX , 5 , 1
figY , 0 , 0
figY , 0 , 1
figY , 1 , 0
figY , 1 , 1
figY , 2 , 0
figY , 2 , 1
figY , 3 , 0
figY , 3 , 1
figY , 4 , 0
figY , 4 , 1
figY , 5 , 0
figY , 5 , 1

然后我执行以下操作以生成空白图并收到以下错误:

for i in dfmastercategory:
    print(f'fig{i}, axis=plt.subplot({len(dfsubcategory)},2,figsize=(5,5))')
    for i in dfmastercategory:
        for row in range(len(dfsubcategory)):
            for column in range(2):
                ax[row,column].plot()    


index 2 is out of bounds for axis 0 with size 2

谢谢

【问题讨论】:

  • 版主您好。我已经搜索了解决方案,但没有遇到相同的情况。如果可以为建议/方向打开相同的内容,我将不胜感激
  • 有人有什么建议吗?

标签: python pandas matplotlib


【解决方案1】:

不知道您在何处以及如何定义ax,我无法提供更多详细信息,为什么您会收到错误消息。我想出了下面的解决方案,没有警告也没有错误。

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame(
    {
        "Date": ["13/07/2020", "13/07/2020", "13/07/2020", "13/07/2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "13-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020", "20-07-2020"],
        "MasterCategory": ["X", "X", "X", "X", "X", "X", "X", "X", "X", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "X", "X", "X", "X", "X", "X", "X", "X", "X", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y"],
        "Name": ["sddf", "sdasd", "fdf", "hfh", "rt", "rt", "ter", "ret", "ret", "gh", "fhgf", "r6", "gfh", "etr", "ert", "ery", "yeet", "hfh", "dth", "e", "eryru", "yu", "utyut", "yuy", "uyu", "uyu", "jy", "jyt", "e", "ter", "yeet", "yrt", "y", "yt", "ter", "ytr", "utr", "uru"],
        "SubCategory": ["A", "A", "A", "B", "B", "B", "B", "B", "C", "D", "D", "D", "E", "E", "F", "F", "F", "F", "F", "A", "A", "A", "B", "B", "B", "B", "B", "C", "D", "D", "D", "E", "E", "F", "F", "F", "F", "F"],
        "Age": [24, 35, 23, 34, 5, 56, 65, 44, 64, 24, 35, 23, 34, 5, 56, 65, 44, 64, 45, 21, 19, 34, 34, 3, 40, 48, 37, 70, 20, 35, 23, 34, 5, 56, 65, 44, 64, 45],
        "Exp": [3, 4, 5, 7, 0, 12, 34, 13, 45, 3, 4, 5, 7, 0, 12, 34, 13, 45, 18, 3, 4, 5, 7, 0, 12, 34, 13, 45, 3, 4, 5, 7, 0, 12, 34, 13, 45, 18],
    }
)

dfmastercategory = df['MasterCategory'].unique()
dfsubcategory = df['SubCategory'].unique()

for i in dfmastercategory:
    print(f'fig{i}, axis=plt.subplot({len(dfsubcategory)},2,figsize=(5,5))')

for i in dfmastercategory:
    fig, axis = plt.subplots(nrows=len(dfsubcategory), ncols=2, figsize=(5,5))
    for row in range(len(dfsubcategory)):
        for column in range(2):
            print((f'fig{i} , {row} , {column}'))
            axis[row, column].set_title(dfsubcategory[row])
            axis[row, column].plot()
    fig.tight_layout()
    fig.show()

注意:您的代码中有一些拼写错误

  • df['MaterCategory'].unique() 中的 MaterCategory 应该是 MasterCategory
  • plt.subplot() in fig{i}, axis=plt.subplot({len(dfsubcategory)},2,figsize=(5,5)) 应该是 plt.subplots()

【讨论】:

  • 感谢您的回复。我实际上正在编写另一份报告,并会尽快回复您。很抱歉回复晚了,因为我不希望有人回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-11
  • 2011-02-08
相关资源
最近更新 更多