Slo*_*ela 6 python matplotlib heatmap pandas
我想建立此数据的热图:
curation1 curation2 overlap
1 2 0
1 3 1098
1 4 11
1 5 137
1 6 105
1 7 338
2 3 351
2 4 0
2 5 1
2 6 0
2 7 0
3 4 132
3 5 215
3 6 91
3 7 191
4 5 6
4 6 10
4 7 19
5 6 37
5 7 95
6 7 146
Run Code Online (Sandbox Code Playgroud)
我用以下代码制作了一个热图:
import sys
import pandas as pd
import matplotlib
matplotlib.use('Agg')
import matplotlib.ticker as ticker
import matplotlib.cm as cm
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
from matplotlib import colors
data_raw = pd.read_csv(sys.argv[1],sep = '\t')
data_raw["curation1"] = pd.Categorical(data_raw["curation1"], data_raw.curation1.unique())
data_raw["curation2"] = pd.Categorical(data_raw["curation2"], data_raw.curation2.unique())
data_matrix = data_raw.pivot("curation1", "curation2", "overlap")
fig = plt.figure()
fig, ax = plt.subplots(1,1, figsize=(12,12))
heatplot = ax.imshow(data_matrix,cmap = 'BuPu')
#ax.set_xticklabels(data_matrix.columns)
#ax.set_yticklabels(data_matrix.index)
tick_spacing = 1
#ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
#ax.yaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
ax.set_title("Overlap")
fig.savefig('output.pdf')
Run Code Online (Sandbox Code Playgroud)
我有三个问题:
您可以看到颜色方案有点“偏离”,因为大多数数据的颜色都很浅,并且有一个随机的紫色框表示“ 0”。理想情况下,我希望此热图是不同的绿色阴影,最暗的绿色是最高的数字,最亮的(但仍然清晰可见)的绿色是最低的数字。我试着玩的“CMAP”的说法,例如,将其更改为在Python教程中描述的“寒冬” 在这里 ; 但是我做错了。有人可以告诉我,我可以在哪里具体更改此内容?
颜色条:我想添加一个颜色条,但是我想我需要先对问题1进行分类。
不对称:如您所见,该图是不对称的。是否可以绘制热图的一半(例如,删除不必要的线条,而可能将轴标签移至图的右侧?);如果不是,那不是什么大问题,因为我可以重新调整在PowerPoint中)。
这将解决您的前两个问题 -
fig = plt.figure()
fig, ax = plt.subplots(1,1, figsize=(12,12))
heatplot = ax.imshow(data_matrix,cmap = 'Greens')
cbar = fig.colorbar(heatplot, ticks=[data_raw.overlap.min(), data_raw.overlap.max()])
tick_spacing = 1
ax.set_title("Overlap")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4385 次 |
最近记录: |