1 回答

TA貢獻1909條經驗 獲得超7個贊
問題的確切目標有點難以猜測。這是一個嘗試:
import pandas as pd
from matplotlib import pyplot as plt
from matplotlib.collections import PatchCollection
import numpy as np
Shared = pd.DataFrame({'Term': ['Term{i}' for i in range(1, 7)],
? ? ? ? ? ? ? ? ? ? ? ?'Number_Protein': np.random.randint(150, 220, 6),
? ? ? ? ? ? ? ? ? ? ? ?'P_value_abs': np.random.uniform(50, 95, 6)})
ylabels = Shared["Term"]
xlabels = ["Overlap"]
s = Shared["Number_Protein"]
c = Shared["P_value_abs"]
norm = plt.Normalize(c.min(), c.max())
fig, ax = plt.subplots()
R = s / s.max() / 2
circles = [plt.Circle((0, i), radius=r) for i, r in enumerate(R)]
col = PatchCollection(circles, array=c, cmap="coolwarm", norm=norm)
ax.add_collection(col)
ax.set_xticks([0])
ax.set_xticklabels(xlabels)
ax.set_yticks(range(len(R)))
ax.set_yticklabels(ylabels)
ax.set_xlim(-0.5, 0.5)
ax.set_ylim(-0.5, len(ylabels)-0.5 )
ax.set_aspect('equal')
fig.colorbar(col)
plt.show()
這將創建一個圖,圓的半徑與“Number_Protein”成比例,顏色與“P_value_abs”相關。請注意,當顏色值不在零和一之間時,norm
需要將原始值轉換為該范圍。
添加回答
舉報