gpt4 book ai didi

python - 在同一图表上绘制多列 seaborn

转载 作者:太空狗 更新时间:2023-10-30 00:55:19 25 4
gpt4 key购买 nike

我有一个 pandas dataFrame,我正在用 seaborn 绘制:

g = sns.FacetGrid(readCov, col='chr', col_wrap = 4, size=4)
g.map(plt.scatter, 'pos', 'bergC9', hue = edgecolor='white')
g.set(xlim= (0, 250000))

这很好用,并且为“chr”列中的每个“chr”提供了一个图表。但是,我希望每个图表上都有多个列。目前只显示一个,名为“bergC9”的那个。我想用不同颜色在同一个图表上放置更多列。

有什么想法吗?

谢谢!

编辑:输入数据文件

chr description pos bergB7  bergC9  EvolB20
1 1 '"ID=PBANKA_010290;Name=PBANKA_010290;descript... 108389 0.785456 0.899275 0.803017
2 1 '"ID=PBANKA_010300;Name=PBANKA_010300;descript... 117894 1.070673 0.964203 0.989372
3 1 '"ID=PBANKA_010310;Name=PBANKA_010310;descript... 119281 1.031106 1.042189 0.883518
4 1 '"ID=PBANKA_010320;Name=PBANKA_010320;descript... 122082 0.880109 1.031673 1.026539
5 1 '"ID=PBANKA_010330;Name=PBANKA_010330;descript... 126075 0.948105 0.969198 0.849213

编辑:我想要一个以 pos 为 x 轴,以 bergB7、bergC9、EvolB20 等为 y 轴的所有“菌株”的散点图,因此同一张图上有多个菌株。我能够通过重新格式化我的数据集来实现这一点,因此它现在有一个“应变”参数或列并连接所有 y 数据。现在我可以将 hue 语法与“应变”一起使用。我不想重新格式化我所有的数据集。我认为可以创建一个循环来引用我想要绘制的所有列,但我尝试了几种语法都无济于事。我还想过其他方法来实现这一点,但这些方法会创建新的数据集,而且我知道这不是以编程方式进行的方法。我是新用户,希望正确开始。

输出应该是这样的(显示了 15 个图形面板的子集):(因为我的'声望'不够高所以不能发图)

最佳答案

编辑数据以包含两个 chr 案例。应该适用于任意数量的“菌株”列。数据确实需要重新格式化;来自 seaborn 文档:

To use these features, your data has to be in a Pandas DataFrame and it must take the form of what Hadley Whickam calls “tidy” data. In brief, that means your dataframe should be structured such that each column is a variable and each row is an observation.

但是 pandas 很容易做到:

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
readCov = pd.DataFrame([ (1, '\'"ID=PBANKA_010290;Name=PBANKA_010290;descript...', 108389, 0.785456, 0.899275, 0.803017),
(1, '\'"ID=PBANKA_010300;Name=PBANKA_010300;descript...', 117894, 1.070673, 0.964203, 0.9893719999999999),
(1, '\'"ID=PBANKA_010310;Name=PBANKA_010310;descript...', 119281, 1.0311059999999999, 1.042189, 0.883518),
(2, '\'"ID=PBANKA_010320;Name=PBANKA_010320;descript...', 122082, 0.880109, 1.031673, 1.0265389999999999),
(2, '\'"ID=PBANKA_010330;Name=PBANKA_010330;descript...', 126075, 0.948105, 0.969198, 0.8492129999999999)],
columns=[u'chr', u'description', u'pos', u'bergB7', u'bergC9', u'EvolB20'],
)

meltCov = pd.melt(readCov,id_vars=['chr','description','pos'], var_name='strain')
g = sns.FacetGrid(meltCov, col='chr', hue='strain')
g.map(plt.scatter, 'pos','value')
g.set_xticklabels(rotation=45)
g.add_legend()

#this plots a figure per script automatically
from os.path import realpath, basename
s = basename(realpath(__file__))
fig = plt.gcf()
fig.savefig(s.split('.')[0])
plt.show()

enter image description here

关于python - 在同一图表上绘制多列 seaborn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29712334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com