通常您会为此类数据使用散点图。但是,我发现如果我将每个点绘制为注释标记,我可以最大程度地控制标记的大小和颜色,这正是您解决此问题所需要的。假设您在 csv 文件中有以下示例数据:
x,y,radius,intensity
1,4,3,10
2,4,4,20
4,2,5,30
6,8,3,40
8,10,2,50
9,4,6,50
3,2,3,20
你可以这样画:
import pandas as pd
from matplotlib import pyplot as plt
df = pd.read_csv('sample2.csv')
intensity_range = (df.intensity.max()-df.intensity.min())
colors = ['red','orange', 'yellow', 'green', 'blue']
for _,row in df.iterrows():
plt.annotate(text=' ', xy= (row['x'],row['y']), size= row['radius'], bbox={"boxstyle":"circle","color":colors[int(row['intensity']*4/intensity_range)-1]})
plt.xlim(df.x.min() - 1, df.x.max() + 1)
plt.ylim(df.y.min() - 1, df.y.max() + 1)
plt.show()
您可以使用相同的注释策略来添加自定义颜色条,如下所示。使用下面代码中的常量,让它看起来像你想要的那样。
for i, color in enumerate(colors):
plt.annotate(text= str(i* intensity_range//4 + df.intensity.min()).ljust(8, ' '), xy=(df.x.mean() + i, df.y.max()+ 1), size=(10), bbox={"boxstyle": "square", "color": color})