微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

df.plot.scatter: c 和 cmap

如何解决df.plot.scatter: c 和 cmap

我有一个数据框(nb - 数据是虚拟数据,不代表图中的内容):

    Index     BGC frequency - Count     Proportion of total BGCs both captured and not captured by antiSMASH - %
  species_a            1                                       2
  species_b            3                                       4
     ...              ...                                     ...

我想绘制 BGC frequency - CountProportion of total BGCs both captured and not captured by antiSMASH - % 的散点图,其中点根据分类 Index 和图例着色。

import matplotlib.pyplot as plt
from matplotlib import colors
import pandas as pd

colorlist = list(colors.ColorConverter.colors.keys())
captured_df.plot.scatter(x='BGC frequency - Count',y= 'Proportion of total BGCs both captured and not captured by antiSMASH - %',c = colorlist,title = 'BGCs with an antiSMASH region')

让我靠近:

Dataframe scatter plot

但我无法获得传奇。理想情况下,我想要类似于 here,第 69 行:

desired format of dataframe scatter plot

但是当我尝试时:

df.plot.scatter(x='BGC frequency - Count',y='Proportion of total BGCs both captured and not captured by antiSMASH - %',c=df.index,cmap="viridis",s=50)

我明白了:

ValueError: 'c' argument must be a mpl color,a sequence of mpl colors or a sequence of numbers,not Index(...list of index species names...)

我不确定这是为什么 - 我认为 cmap 会将 c 数据转换为正确数据类型的列表?上面的链接明确处理分类数据 -

如果将分类列传递给 c,则离散颜色条将 生产

另外请注意,我不想要数字颜色条 - this 没有多大用处:

bad scatter plot

感谢阅读:D

解决方法

诀窍是将“类型”列转换为分类列(在您的情况下为 Index 列)。

例如:

d = pd.DataFrame([["a",1,3],["b",3,2,["a",5,2]],columns=['type','x','y'])
d['type'] = pd.Categorical(d['type'])
d.plot.scatter(x='x',y='y',c='type',cmap='inferno')
plt.show()

enter image description here

这应该有效。

另外值得一提的是,此功能来自 Pandas 1.3.0 版 (July 2. 2021)!

确保您使用合适的版本。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。