此问题已在此处有答案:
Color a scatter plot by Column Values(6个回答)
1年前关闭。
我试图使用Pandas DataFrame对象在pyplot中绘制一个简单的散点图,但想要一种有效的方法来绘制两个变量,但由第三列(键)指定符号。我已经尝试了各种方法使用df。groupby,但没有成功。下面是一个df脚本示例。这颜色的标记,根据'key1',但我想看到一个传说与'key1'类别。我说的对吗?谢谢。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.normal(10,1,30).reshape(10,3), index = pd.date_range('2010-01-01', freq = 'M', periods = 10), columns = ('one', 'two', 'three'))
df['key1'] = (4,4,4,6,6,6,8,8,8,8)
fig1 = plt.figure(1)
ax1 = fig1.add_subplot(111)
ax1.scatter(df['one'], df['two'], marker = 'o', c = df['key1'], alpha = 0.8)
plt.show()
8条答案
按热度按时间rmbxnbpk1#
seaborn有一个 Package 器函数
scatterplot
,它可以更有效地完成这一任务。vxf3dgd42#
您可以使用
scatter
来实现这一点,但这需要为key1
提供数值,并且您不会有图例,正如您所注意到的。对于像这样的离散类别,最好只使用
plot
。例如:如果您希望事情看起来像默认的
pandas
样式,那么只需使用pandas样式表更新rcParams
并使用其颜色生成器。(我也稍微调整了一下图例):piwo6bdm3#
使用Seaborn(
pip install seaborn
)作为一个链接很容易做到这一点sns.scatterplot(x_vars="one", y_vars="two", data=df, hue="key1")
:下面是数据框供参考:
由于数据中有三个变量列,您可能需要使用以下命令绘制所有成对维度:
https://rasbt.github.io/mlxtend/user_guide/plotting/category_scatter/是另一种选择。
uhry853o4#
对于
plt.scatter
,我只能想到一个:使用代理艺术家:结果是:
iaqfqrcu5#
你可以使用df。plot.scatter,并将一个数组传递给c= argument,定义每个点的颜色:
qrjkbowd6#
从matplotlib 3.1以后可以使用
.legend_elements()
。自动图例创建中显示了一个示例。优点是可以使用单个分散调用。在这种情况下:
如果键不是直接以数字形式给出的,它看起来像
wbgh16ku7#
您也可以尝试Altair或ggpot,它们专注于声明性可视化。
牵牛星代码
ggplot代码
dzjeubhm8#
这是相当黑客,但你可以使用
one1
作为一个Float64Index
来完成所有的事情:请注意,从0。20.3,sorting the index is necessary,图例为a bit wonky。