我在使用aes()
我有以下代码:
import pandas as pd
from plotnine import *
data1 = {'dilution': [2.000000, 2.477121, 2.954243, 3.431364, 3.908485, 4.385606, 4.862728, 5.339849, 5.816970, 2.000000, 2.477121, 2.954243, 3.431364, 3.908485, 4.385606, 4.862728, 5.339849, 5.816970],
'variable': ["mouse 1", "mouse 1", "mouse 1", "mouse 1", "mouse 1", "mouse 1", "mouse 1", "mouse 1", "mouse 1", "mouse 2", "mouse 2", "mouse 2", "mouse 2", "mouse 2", "mouse 2", "mouse 2", "mouse 2", "mouse 2"],
'value': [547.180708, 495.883622, 439.109089, 277.819313, 115.926188, 42.041189, 15.276367, 11.696537, 2.280014, 269.398164, 233.667531, 215.410352, 169.512070, 102.877518, 36.860550, 13.960504, 4.891481, -3.465304]}
df1 = pd.DataFrame.from_dict(data1)
data2 = {'dilution': [2.0, 2.0, 2.0],
'value': [-7.873768, -3.926121, 4.170833] }
df2 = pd.DataFrame.from_dict(data2)
data3 = {'dilution': [3.90309, 3.90309],
'value': [756.715198, 540.613828],
'variable': ["mouse 1", "mouse 2"]}
df3 = pd.DataFrame.from_dict(data3)
g = (ggplot(df1)
+ geom_line(aes(x='dilution', y='value', color='variable'), data=df1, size=1.0)
+ geom_point(aes(x='dilution', y='value', color='variable'), data=df1, size=1.0)
+ geom_point(aes(x='dilution', y='value'), data=df2, size=3.0)
+ geom_point(aes(x='dilution', y='value', color='variable'), data=df3, size=2.0, shape='s')
+ scale_x_continuous( )
)
print(g)
生成以下图表:
example plotnine with black data points
如您所见,来自df2
的数据点不会出现在图例中。我希望图例中有一个黑点表示来自df2
的所有点。如果我按如下方式更改data2
,我可以在图例中显示它:
data2 = {'dilution': [2.0, 2.0, 2.0],
'value': [-7.873768, -3.926121, 4.170833],
'type': ['test', 'test', 'test']}
然后将其映射到美学,如下所示:geom_point(aes(x='dilution', y='value', color='type'), data=df2, size=3.0)
然后点数不再是黑色,我似乎无法再将点数改回黑色。添加color='black'
参数不起作用:
example plotting with coloured legend points
是否有更好的解决办法让df2
的所有数据点保持黑色,而在图例中只出现一次黑点?
其次,有没有办法在图例中添加一个黑色正方形来表示df3
的所有数据点?
答案 0 :(得分:0)
自动传奇。影响它的唯一方法是更改data
,aes
映射或scale
参数。问题是你正在尝试创建具有不同映射的图层,但期望它们共享一个图例。
是否有更好的解决办法让df2的所有数据点都保持黑色,而在图例中只出现一次黑点?
解决方案是将数据操作为单个连贯的整体,或确保不同的数据帧具有映射到相同美学的相似列(您似乎已经使用第二个df2完成了此操作)。然后,如果要控制图例中的颜色,则应使用手动缩放。
+ scale_color_manual(['red', 'cyan', 'black'])
其次,是否有一种方法可以在图例中添加一个黑色方块来表示df3中的所有数据点?
没有办法做到这一点。
关键点是,图例是理解数据的指南,如果您有动机操纵项目中显示的内容,那么数据最有可能没有得到妥善组织。此外,如果您想标记“特殊”点,请使用注释。