带有颜色编码点的Pandas Scatterplot

时间:2017-07-27 09:43:08

标签: python pandas data-visualization scatter-plot

我想从Dataframe中制作一个散点图,其中每个点都以独特的颜色可视化,这取决于该值的发生频率。例如,我有以下数据框,包含两个数值的列表:

df = pd.DataFrame({'width': image_widths, 'height': image_heights})
df.head(10)
   height  width
0    1093    640
1    1136    639
2    1095    640
3    1136    639
4    1095    640
5    1100    640
6    1136    640
7    1136    639
8    1136    640
9    1031    640

现在,如您所见,一些价值对会多次出现。例如(1095/640)在索引2和4处出现。如何为该点提供表示“两次出现”的颜色。 如果从连续光谱中自动拾取颜色,就像在彩条图中一样,那就更好了。这样,色调已经给你一个频率的印象,而不是通过手动查找颜色代表它的颜色。

我也很欣赏色彩的另一种选择,即将出现的频率编码为点的半径。

修改

为了说明我的问题,我发现,df.groupby(['width','height']).size()给了我所有组合的计数。 现在我缺乏将此信息与图中点的颜色(或大小)相关联的技能。

1 个答案:

答案 0 :(得分:2)

因此,让我们将其设为真Minimal, Complete, and Verifiable example

import matplotlib.pyplot as plt
import pandas as pd

image_heights = [1093, 1136, 1095, 1136, 1095, 1100, 1136, 1136, 1136, 1031]
image_widths = [640, 639, 640, 639, 640, 640, 640, 639, 640, 640]
df = pd.DataFrame({'width': image_widths, 'height': image_heights})
print(df)

   width  height
0    640    1093
1    639    1136
2    640    1095
3    639    1136
4    640    1095
5    640    1100
6    640    1136
7    639    1136
8    640    1136
9    640    1031

您希望DataFrame中的尺寸(计数)以及宽度和高度:

plot_df = df.groupby(['width','height']).size().reset_index(name='count')
print(plot_df)

   width  height  count
0    639    1136      3
1    640    1031      1
2    640    1093      1
3    640    1095      2
4    640    1100      1
5    640    1136      2

如果您使用DataFrame.plot.scatter,则散点图中的颜色和尺寸由cs关键字控制:

plot_df.plot.scatter(x='height', y='width', s=10 * plot_df['count']**2,
                     c='count', cmap='viridis')

Scatter plot