在同一图表上绘制多个列seaborn

2024-06-01 01:17:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个和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轴的散点图,它们都是“应变”,因此在同一张图上有几个应变。我可以通过重新格式化数据集来实现这一点,这样它现在就有了一个'strain'参数或列,并连接了所有的y数据。现在我可以用“strain”的色调语法了。我不想重新格式化所有数据集。我原以为可以创建一个循环来引用我想要绘制的所有列,但我尝试了几个语法却没有成功。我还想过其他方法来实现这一点,但是这些方法会创建新的数据集,我知道这不是以编程方式进行的方法。我是一个新用户,想正确开始。

这是输出的外观(显示的是15个图形面板的子集): (我无法发布图片,因为我的“声誉”不够高)


Tags: 数据方法nameposid编辑语法col
1条回答
网友
1楼 · 发布于 2024-06-01 01:17:38

将数据编辑为有两个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.

但是熊猫很容易做到:

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

相关问题 更多 >