首页 > 解决方案 > 在 Python 中制作 x,y,z 数据的热图

问题描述

我正在尝试在 Python 中绘制热图。我已经研究了几个教程,但仍然无法实现我所需要的。我的数据有 3 列:XY(散点图中的坐标)和集群(每行放置一个组/集群)。所需的输出应如下所示(6 个簇和 X、Y 点分布在彩色区域):

在此处输入图像描述

我当前的代码:

# libraries
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import kde
from scipy.interpolate import griddata

# Get the data (csv file is hosted on the web)
url = 'https://raw.githubusercontent.com/ampil/sandbox/master/latest-sales-sample.csv'
df = pd.read_csv(url, sep = ';')
df = df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
# create data
x = df['X']
y = np.log(df['Y'])
z = df['cluster']

# target grid to interpolate to
xi = yi = np.arange(0, 1.01, 0.01)
xi, yi = np.meshgrid(xi,yi)

# interpolate
zi = griddata((x,y),z,(xi,yi),method='cubic')

# plot
fig = plt.figure()
ax = fig.add_subplot(111)
ax.axis((x.min(), x.max(), y.min(), y.max()))
plt.contourf(xi, yi, zi, np.arange(0, 1.01, 0.01), cmap='coolwarm')
plt.plot(x,y,'k.')
plt.xlabel('x',fontsize=16)
plt.ylabel('y',fontsize=16)
plt.show()
plt.close(fig)

给我

我的图表

稍后,我计划通过 dash 发布图表。

任何帮助表示赞赏!

标签: pythonmatplotlibscipy

解决方案


import matplotlib
colors = ['red','green','blue','purple','black', 'coral']

fig = plt.figure(figsize=(8,8))
plt.scatter(x, y, c = z, cmap=matplotlib.colors.ListedColormap(colors))
plt.show()

在此处输入图像描述


推荐阅读