【问题标题】:Pandas scatter plot not coloring by column value熊猫散点图不按列值着色
【发布时间】:2021-02-05 22:04:29
【问题描述】:

我有一个简单的 pandas DataFrame,如下所示。我想在 y 轴上创建 value 的散点图,在 x 轴上创建 date 的散点图,并用 category 为点着色。但是,着色点不起作用。

# Create dataframe
df = pd.DataFrame({
    'date': ['2016-01-01', '2016-02-01', '2016-03-01', '2016-01-01', '2016-02-01', '2016-03-01'],
    'category': ['Wholesale', 'Wholesale', 'Wholesale', 'Retail', 'Retail', 'Retail'],
    'value': [50, 60, 65, 55, 62, 70]
})
df['date'] = pd.to_datetime(df['date'])

# Try to plot
df.plot.scatter(x='date', y='value', c='category')

ValueError: 'c' argument must be a mpl color, a sequence of mpl colors or a sequence of numbers, not ['Wholesale' 'Wholesale' 'Wholesale' 'Retail' 'Retail' 'Retail'].

为什么我会收到错误消息? Pandas 散点图documentation 表示参数c 可以是“列名或位置,其值将用于根据颜色图为标记点着色。”

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:
    df.plot.scatter(x='date', y='value', c=df['category'].map({'Wholesale':'red','Retail':'blue'}))
    

    【讨论】:

      【解决方案2】:

      我想你在看seaborn

      import seaborn as sns
      sns.scatterplot(data=df, x='date', y='value', hue='category')
      

      输出:

      或者你可以循环遍历df.groupby

      fig, ax = plt.subplots()
      for cat, d in df.groupby('category'):
          ax.scatter(x=d['date'],y=d['value'], label=cat)
      

      输出:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-24
        • 1970-01-01
        • 1970-01-01
        • 2019-01-23
        • 1970-01-01
        • 2021-11-25
        • 2015-03-29
        • 1970-01-01
        相关资源
        最近更新 更多