eri*_*fas 8 python plot matplotlib pandas
关于使用pandas进行数据分析的上一个问题的后续内容.我现在想要绘制我的数据,如下所示:
PrEST ID Gene Sequence Ratio1 Ratio2 Ratio3
HPRR12 ATF1 TTPSAXXXXXXXXXTTTK 6.3222 4.0558 4.958
HPRR23 CREB1 KIXXXXXXXXPGVPR NaN NaN NaN
HPRR23 CREB1 ILNXXXXXXXXGVPR 0.22691 2.077 NaN
HPRR15 ELK4 IEGDCEXXXXXXXGGK 1.177 NaN 12.073
HPRR15 ELK4 SPXXXXXXXXXXXSVIK 8.66 14.755 NaN
HPRR15 ELK4 IEGDCXXXXXXXVSSSSK 15.745 7.9122 9.5966
Run Code Online (Sandbox Code Playgroud)
...除了有更多的行,我实际上并不想绘制比率,而是从它们派生出一些其他计算值,但这对我的绘图问题无关紧要.我有一个看起来或多或少像上面的数据的数据框,我想要的是这样的:
下面是我之前的非pandas版本的脚本生成的图像:
...其中红色三角形表示用于设置y轴最大值的截止值之外的值.ID被涂黑了,但你应该能够看到我正在追求的东西.复制数基本上是在它们之上进行计算的比率,因此它们只是另一个数字,而不是我在上面的数据中显示的数字.
我试图在文档中找到类似的问题和解决方案,但没有找到.大多数人似乎需要使用日期来做这个,因为日期似乎有现成的绘图功能,这对我没有帮助(我认为).任何帮助非常感谢!
跳过一些更精细的绘图点,得到:
我建议你尝试使用matplotlib来处理绘图,并手动循环颜色.您可以使用以下内容:
import matplotlib.pyplot as plt
import pandas as pd
import itertools
#data
df = pd.DataFrame(
{'id': [1, 2, 3, 3],
'labels': ['HPRR1234', 'HPRR4321', 'HPRR2345', 'HPRR2345'],
'g': ['KRAS', 'KRAS', 'ELK4', 'ELK4'],
'r1': [15, 9, 15, 1],
'r2': [14, 8, 7, 0],
'r3': [14, 16, 9, 12]})
#extra setup
plt.rcParams['xtick.major.pad'] = 8
#plotting style(s)
marker = itertools.cycle((',', '+', '.', 'o', '*'))
color = itertools.cycle(('b', 'g', 'r', 'c', 'm', 'y', 'k'))
#plot
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(df['id'], df['r1'], ls='', ms=10, mew=2,
marker=marker.next(), color=color.next())
ax.plot(df['id'], df['r2'], ls='', ms=10, mew=2,
marker=marker.next(), color=color.next())
ax.plot(df['id'], df['r3'], ls='', ms=10, mew=2,
marker=marker.next(), color=color.next())
# set the tick labels
ax.xaxis.set_ticks(df['id'])
ax.xaxis.set_ticklabels(df['labels'])
plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=12)
plt.tight_layout()
fig.savefig("example.pdf")
Run Code Online (Sandbox Code Playgroud)
如果你有很多行,你可能会想要更多的颜色,但这至少显示了这个概念.