之前被老师说写论文图表单一,不是柱状图就是折线图,于是作者本人痛定思痛>﹏<,决心搜罗五花八门的数据可视化图表(虽然有点花里胡哨,不过能用就行)
注:以下绘图数据来源并不准确,大家看个乐呵就行
文章目录
01对比图
1-1 柱状图
柱状图对于数据的呈现较为直观,一般都是关注数据的值,和他们之间量的对比。
(1)基础柱状图
代码如下:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #设置中文
import seaborn as sns
# 示例数据
categories = ['数据结构与算法', '数学分析', '高等代数', '实分析']
values = [14, 15, 16, 9]
edgecolor = 'black' # 边框颜色
# 使用 seaborn 提供的调色板
colors = sns.color_palette('pastel', n_colors=len(categories))
# 创建柱状图
bars = plt.bar(categories, values, color=colors, edgecolor=edgecolor, width=0.5) # 设置宽度
# 添加标题和标签
plt.title('数学系学生对课程的喜爱值')
plt.xlabel('课程')
plt.ylabel('值')
# 显示图形
plt.show()
plt.bar是matplotlib中绘制柱状图的函数,传入参数解释如下:
bars = plt.bar(categories, values, color=colors, edgecolor=edgecolor, width=0.5) |
---|
传入参数 | 解释 |
---|---|
categories | 类别, x x x轴上的各个离散值 |
values | y y y轴上的数值 |
color | 颜色,例如’black’、‘red’ |
edgecolor | 边框颜色 |
width | 宽度 |
由于作者认为Python自带的颜色一言难尽,因此使用了seaborn的调色板:
colors = sns.color_palette(‘pastel’, n_colors=len(categories)) |
---|
传入参数 | 解释 |
---|---|
‘pastle’ | seaborn的一种柔和的调色风格,类似的还有’deep’,‘muted’,‘dark’ |
n_colors | 颜色的个数 |
(2)分组柱状图
代码如下(也就和基础柱状图差不多),要注意设置一下间距:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
# 示例数据
categories = ['北京', '上海', '广州', '深圳']
values1 = [10, 15, 7, 20] # 组1的数据
values2 = [12, 18, 9, 22] # 组2的数据
values3 = [15, 16, 20, 14]
bar_width = 0.2 # 柱子宽度
# 生成每组柱子的x轴位置
x = np.arange(len(categories))
# 创建分组柱状图
fig, ax = plt.subplots()
# 绘制两组柱状图
bars1 = ax.bar(x - bar_width, values1, bar_width, label='食物',color='lightblue')
bars2 = ax.bar(x , values2, bar_width, label='电子产品',color='lightgreen')
bars3 = ax.bar(x+bar_width,values3,bar_width,label='化妆品',color='orange')
# 添加标题和标签
ax.set_title('不同城市对不同消费品的喜爱程度')
ax.set_xlabel('类别')
ax.set_ylabel('值')
ax.set_xticks(x)
ax.set_xticklabels(categories)
ax.legend()
# 显示图形
plt.show()
(3) 条形图
值得注意的是,一般来说这种横向的条形图(Horizontal Bar)都是由高到低排序的。
代码如下:
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
plt.rcParams['font.sans-serif']=['SimHei']
# 示例数据
categories = ['北京', '上海', '广州', '深圳']
values = [30, 30, 25, 15]
colors=sns.color_palette('pastel', n_colors=len(categories))
sorted_indices = np.argsort(values) # 从大到小排序的索引
sorted_categories = np.array(categories)[sorted_indices]
sorted_values = np.array(values)[sorted_indices]
# 创建水平条形图
bars=plt.barh(sorted_categories, sorted_values, color=colors, edgecolor='black')
plt.xlim(0,35)
# 添加标题和标签
plt.title('年轻人最想去的大城市在调查中的占比')
plt.xlabel('值')
plt.ylabel('城市')
for bar in bars:
plt.text(plt.xlim()[1], bar.get_y() + bar.get_height() / 2, f'{bar.get_width()}%', va='center', ha='right', fontweight='bold', color='darkblue' , family='serif',fontsize=12)
# 显示图形
plt.show()
使用的API是
plt.barh(categories, values, color=colors, edgecolor=‘black’) |
---|
跟前面的代码差不多,不再赘述(作者懒,不想写了)
(4)双向柱状图
双向柱状图常用于人口统计对比,可以直观看出两个类别之间数值的差异。
代码如下(实质是将数据变成负数绘图,本质上和条形图的绘制是一样的):
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
# 示例数据
categories = ['0-10', '10-20', '20-30', '30-40', '40-50', '50+']
male_population = [7, 15, 25, 35, 20, 5] # 男性人口数据
female_population = [10, 20, 15, 30, 20, 10] # 女性人口数据
# 生成每组柱子的x轴位置
y = np.arange(len(categories))
bar_width = 1 # 柱子的宽度
# 创建双向柱状图
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制男性人口的柱状图(向右)
bars1 = ax.barh(y, male_population, bar_width, label='男性', color='skyblue', edgecolor='black')
# 绘制女性人口的柱状图(向左),数据取负值
bars2 = ax.barh(y, [-v for v in female_population], bar_width, label='女性', color='salmon', edgecolor='black')
# 设置坐标轴标签
ax.set_yticks(y)
ax.set_yticklabels(categories)
ax.set_xticks((-40,-25,0,25,40),('40','25','0','25','40')) #重置x轴的显示,不然会显示成负数
ax.set_xlabel('人口数量')
ax.set_title('社区不同年龄段男女人口对比')
# 添加数据标签
for bar in bars1:
plt.text(bar.get_width() + 1, bar.get_y() + bar.get_height() / 2, f'{bar.get_width()}', va='center', ha='left')
for bar in bars2:
plt.text(bar.get_width() - 1, bar.get_y() + bar.get_height() / 2, f'{-bar.get_width()}', va='center', ha='right')
# 添加图例
ax.legend()
# 显示图形
plt.show()
(5)堆叠柱状图
堆叠柱状图可以很直观地看出不同数据的对比,缺点是同一类别的柱子有时候不在同一水平线上,肉眼对比不好判断。
代码如下:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
# 示例数据
categories = ['一班', '二班', '三班']
values1 = [10, 20, 30] #三个班关于王者荣耀的数据
values2 = [15, 25, 10]
values3 = [20, 30, 50]
# 创建一个图形对象和一个坐标轴对象
fig, ax = plt.subplots()
# 绘制堆叠柱状图
bar_width = 0.5
index = np.arange(len(categories))
# 绘制第一个数据集
ax.bar(index, values1, bar_width, label='王者荣耀')
# 绘制第二个数据集,堆叠在第一个数据集上
ax.bar(index, values2, bar_width, bottom=values1, label='原神')
# 绘制第三个数据集,堆叠在前两个数据集上
ax.bar(index, values3, bar_width, bottom=np.array(values1) + np.array(values2), label='蛋仔派对')
# 添加标签和标题
ax.set_xlabel('班级')
ax.set_ylabel('人数')
ax.set_title('三个班喜欢的游戏数据')
ax.set_xticks(index)
ax.set_xticklabels(categories)
ax.legend()
# 显示图形
plt.show()
该代码的核心在于设置bar中的bottom参数,让其与上一个数据的顶部平齐即可。
(6)百分比堆叠柱状图
这实际上是堆叠柱状图的一个改进,百分比堆叠柱状图的上下都是平齐的,对于表示百分比数据非常方便。仍然以上面堆叠柱状图所调查的主题作为例子:
代码如下:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
# 示例数据
categories = ['一班', '二班', '三班']
values1 = [10, 20, 30] #三个班关于王者荣耀的数据
values2 = [15, 25, 10]
values3 = [20, 30, 50]
# 计算总值
total_values = np.array(values1) + np.array(values2) + np.array(values3)
# 计算百分比
percentage1 = np.array(values1) / total_values * 100
percentage2 = np.array(values2) / total_values * 100
percentage3 = np.array(values3) / total_values * 100
# 创建图形对象和坐标轴对象
fig, ax = plt.subplots()
# 绘制百分比堆叠柱状图
bar_width = 0.5
index = np.arange(len(categories))
# 绘制第一个数据集
bars1 = ax.bar(index, percentage1, bar_width, label='王者荣耀')
# 绘制第二个数据集,堆叠在第一个数据集上
bars2 = ax.bar(index, percentage2, bar_width, bottom=percentage1, label='原神')
# 绘制第三个数据集,堆叠在前两个数据集上
bars3 = ax.bar(index, percentage3, bar_width, bottom=percentage1 + percentage2, label='蛋仔派对')
# 添加标签和标题
ax.set_xlabel('班级')
ax.set_ylabel('人数占比/%')
ax.set_title('三个班关于喜爱游戏的数据')
ax.set_xticks(index)
ax.set_xticklabels(categories)
ax.legend()
# 显示图形
plt.show()
1-2 饼状图
(1)雷达图
雷达图一般适用于类别较少,且差别不算太大的情况下,对于数据的对比非常直观。
例子1:基本雷达图
代码如下:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Patch
from matplotlib.lines import Line2D
plt.rcParams['font.sans-serif']=['SimHei']
# 示例数据
categories = ['体能', '学习', '社交', '科研', '对人类的大爱']
values = [4, 3, 2, 5, 4]
# 计算雷达图的角度
num_vars = len(categories)
angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False).tolist()
# 使雷达图闭合
values += values[:1]
angles += angles[:1]
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True)) #使用极坐标
# 绘制雷达图
ax.fill(angles, values, color='blue', alpha=0.25) #填充雷达图
ax.plot(angles, values, color='blue', linewidth=2)
# 设置雷达图的标签
ax.set_xticks(angles[:-1])
ax.set_yticks([1, 2, 3, 4, 5])
ax.set_yticklabels(['1', '2', '3', '4', '5'],fontsize=15) # 设置极坐标的刻度标签,注意:这不是直角坐标系,不能用yticks
ax.set_xticklabels(categories,fontsize=13)
# 添加图例
legend_elements = [Line2D([0], [0], color='blue', lw=2, label='第一名同学')] #如果之后有别的也可以添加做堆叠雷达图
ax.legend(handles=legend_elements, loc='upper right', bbox_to_anchor=(1.1, 1.1))
# 添加标题
ax.set_title('论五边形战士的自我修养', size=20, color='blue', y=1.03)
# 显示图形
plt.show()
这里最主要的是用到了极坐标,其本质是极坐标下的折线图。
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True)) |
---|
利用polar=True开启极坐标后,可以观察到
ax.fill(angles, values, color=‘blue’, alpha=0.25) |
---|
ax.plot(angles, values, color=‘blue’, linewidth=2) |
---|
传入参数变成了极角和极径
例子2:堆叠雷达图
代码如下:
import matplotlib.pyplot as plt
import pandas as pd
from math import pi
# 设置数据
df = pd.DataFrame({
'group': ['Bejing', 'Shanghai', 'Shenzhen'],
'Transportation': [35, 30, 30], #这里输入的是,固定x轴上的某个点,不同分组的值
'Medicine': [29, 25, 30,],
'Trade': [8, 39, 23],
'Free':[5, 25, 34],
'landscape':[4, 8, 9]
})
# 目标数量
categories = list(df)[1:]
N = len(categories)
# 角度
angles = [n / float(N) * 2 * pi for n in range(N)]
angles += angles[:1]
fig,ax = plt.subplots(subplot_kw=dict(polar=True))
# 设置起始轴
ax.set_theta_offset(pi / 2)
# 添加背景信息
plt.xticks(angles[:-1], categories)
ax.set_rlabel_position(0)
plt.yticks([10, 20, 30], ["10", "20", "30"], color="grey", size=7)
# 添加数据图
# 一
values = df.loc[0].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="Beijing",color='green')
ax.fill(angles, values, 'green', alpha=0.1) #alpha是用于调节透明度的
# 二
values = df.loc[1].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="Shanghai",color='blue')
ax.fill(angles, values, 'blue', alpha=0.1)
# 三
values = df.loc[2].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="Shanghai",color='orange')
ax.fill(angles, values, 'orange', alpha=0.1)
# 添加图例
plt.legend()
# 显示
plt.show()
(2)玉玦图
这个图在市场分析中相当常见,在使用和分析玉玦图的时候,我们要注意,在数值相等,即玦块角度相同的状况下,外侧的环块会显得比内侧的更长。在这种情况下,我们很容易误认为外侧的数值会大于内侧。
玉玦图长这样:
Python中绘制玉玦图还是相当困难的,echarts库应该可以绘制的(不过作者没有安装echarts库,就先这样吧)
推荐一个可视化的网站:AntV绘制玉玦图
(3)南丁格尔玫瑰图
南丁格尔玫瑰图以面积形象的展示数值的大小,传闻其发明者的初衷是为了记录战争期间士兵的伤亡人数,后来逐渐演变成为一个常用的统计图表。
)
代码如下:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
plt.rcParams['font.sans-serif']=['SimHei']
# 数据生成
num_bins = 8 # 分段数量
theta = np.linspace(0.0, 2 * np.pi, num_bins, endpoint=False) # 角度
r = np.array([8,10,16,11,6,9,12,8]) # 随机生成数据
r = np.concatenate((r, [r[0]])) # 闭合环
theta = np.concatenate((theta, [theta[0]])) # 闭合环
# 绘制图表
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True))
# 使用渐变色
cmap = cm.get_cmap('plasma') # 可以选择其他渐变色,如 'plasma', 'inferno', 'magma'
colors = cmap(np.linspace(0, 1, num_bins))
# 注意:这里宽度的计算需要确保每个柱状图之间没有重叠
width = 2 * np.pi / num_bins # 每个扇区的宽度
bars = ax.bar(theta[:-1], r[:-1], width=width, color=colors, alpha=0.6, edgecolor='black')
# 标签设置
ax.set_yticks([2,4,6,8,10])
ax.set_yticklabels(['2','4','6','8','10'])
# 添加文本标签
labels = ['北京', '河北', '江苏', '福建', '江西', '湖北', '澳门', '河南'] # 每个分段的标注内容
for i in range(num_bins):
angle = theta[i] # 每个柱状图的中间角度
distance = r[i] * 0.7 # 距离圆心的距离,适当调整以确保标签不重叠
ax.text(angle, distance, labels[i], ha='center', va='center', fontsize=20, color='black')
# 标签设置
plt.title('不同省份游泳热爱度(单位:cm)',fontsize=20)
plt.show()
其本质是极坐标下的柱状图,仍然利用的是bar函数。
(4)词云
使用词云时需要导入wordcloud库。通常用于对搜索数据,小说,长文章等进行数据分析。
首先在Terminal导入wordcloud库
pip install wordcloud |
---|
代码如下:
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 添加更多词语
text = ("Python Python Python java java java java Cplus Cplus Csharp "
"JavaScript JavaScript JavaScript JavaScript Ruby Ruby Ruby Ruby "
"PHP PHP PHP PHP Swift Swift Swift Swift Kotlin Kotlin Kotlin Kotlin "
"Go Go Go Go R R R R TypeScript TypeScript TypeScript TypeScript")
# 创建词云对象
wordcloud = WordCloud(
width=800, # 图像宽度
height=800, # 图像高度
background_color='white', # 背景颜色
colormap='viridis', # 词云颜色映射
contour_color='black', # 轮廓颜色
contour_width=1, # 轮廓宽度
max_font_size=80, # 最大字体大小,减小以紧凑排列
min_font_size=8, # 最小字体大小,减小以紧凑排列
margin=2, # 边距
prefer_horizontal=0.9, # 词云中文字的水平显示比例
collocations=False # 不包括词组
).generate(text)
# 显示词云图
plt.figure(figsize=(10, 10)) # 调整图形尺寸
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off") # 关闭坐标轴
plt.show()
02 趋势图
2-1 折线图
折线图的优点是可以直观地展现数据变化的趋势,特别是对于一些时间序列来说,例如一个季度。
(1)基础折线图
可以说是从小学就见过的图表类型,非常经典了。
代码如下:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
plt.rcParams['font.sans-serif']=['SimHei']
x=[1,2,3,4,5,6,7,8,9,10]
y1=[5,7,2,6,8,5,7,3,6,5]
y2=[5,9,2,6,4,7,2,4,6,12]
y3=[6,8,9,1,5,2,3,16,2,4]
# 绘制显示
plt.plot(x, y1, linestyle='-', marker='o',label='广州')
plt.plot(x, y2, linestyle='-', marker='o',label='中山')
plt.plot(x, y3, linestyle='-', marker='o',label='佛山')
plt.title('各个城市连续十天降水量')
plt.xlabel('天数/天')
plt.ylabel('降水量/cm')
plt.legend()
plt.show()
(2)回归曲线图
利用最小二乘法进行曲线拟合。
代码如下:
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
plt.rcParams['font.sans-serif']=['SimHei']
# 生成随机数据
x = np.linspace(1, 10, 100) # 生成从1到10的100个等间距数据点
y = 2 * x+ 1 + np.random.normal(0, 0.5, size=x.shape) # 线性关系并添加噪声
# 计算线性回归参数
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y) # 分别是斜率和偏置
# 生成回归线数据
x_fit = np.linspace(min(x), max(x), 100)
y_fit = slope * x_fit + intercept
# 创建散点图和回归线图
plt.scatter(x, y, color='blue', label='数据点',alpha=0.5,s=50)
plt.plot(x_fit, y_fit, color='red', label='回归线',linewidth=2,alpha=0.7)
# 添加标题和标签
plt.title('回归曲线拟合图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
# 添加图例
plt.legend()
# 显示图形
plt.show()
其中最重要的API是:
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y) |
---|
传入参数 | 解释 |
---|---|
slope | 斜率 |
intercept | 偏置(截距),即最小二乘法拟合出来的常数项 |
r_value | 皮尔逊相关系数,也就是 R 2 R^2 R2 |
p_value | 显著性水平检验值 |
std_err | 斜率的标准误差 |
2-2 面积图
面积图主要在于填充堆叠,其他类别的数据会在前一类别的数据上进行堆叠,使得数据的大小不能直接通过肉眼观察而得。
代码如下:
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x = np.arange(1, 11, 1)
y1 = [1, 4, 6, 8, 9, 8, 11, 12, 10, 15]
y2 = [2, 2, 7, 10, 12, 11,12,13,14,15]
y3 = [2, 8, 5, 10, 6,4,2,5,3,7]
# 生成图表
plt.stackplot(x, y1, y2, y3, labels=['A', 'B', 'C'],colors=['lightgreen','skyblue','orange'])
plt.legend(loc='upper left')
plt.xlabel('year')
plt.ylabel('population')
plt.title('population in the three countries by years')
plt.show()
其中API为:
plt.stackplot(x, [y1, y2, y3], labels,colors) |
---|
03 分布图
3-1 直方图和正态曲线
以样本组作为
x
x
x,以频数
n
n
n作为
y
y
y,绘制直方图并进行正态曲线拟合。
代码如下:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
# 生成随机数据
np.random.seed(42)
data = np.random.randn(1000) # 生成1000个服从标准正态分布的随机数
# 绘制直方图
count, bins, ignored = plt.hist(data, bins=30, density=True, color='lightgreen', edgecolor='black', alpha=0.7)
# 拟合正态分布曲线
mu, std = norm.fit(data) # 计算数据的均值和标准差
xmin, xmax = plt.xlim() # 获取x轴的范围
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std) # 计算正态分布的概率密度函数值
# 绘制正态分布曲线
plt.plot(x, p, 'k', linewidth=2, label='nomalization curve'f' \n$\mu$:{mu:.2f},$\sigma^2$={std:.2f}')
# 添加标题和标签
plt.title('Histogram')
plt.xlabel('number')
plt.ylabel('n')
# 添加图例
plt.legend()
# 显示图形
plt.show()
重要API:
count, bins, ignored = plt.hist(data, bins, density=True, color, edgecolor, alpha=0.7) |
---|
参数 | 解释 |
---|---|
bins | 将数据分成多少组 |
density | 如果设置为 True,直方图将显示数据的概率密度而不是频数。这意味着直方图的总面积将等于1,适合与概率密度函数(如正态分布曲线)一起使用 |
alpha | 直方图的颜色透明度 |
count | 这是一个数组,包含每个柱子(bin)的高度,即每个区间内的数据点数(或密度值)。当 density=True 时,count 表示每个区间的概率密度值 |
bins | 这是一个数组,包含直方图的区间边界(bin edges),bins 数组的长度比 count 多1,因为它表示每个柱子的左右边界 |
ignored | 这是一个数组,通常在绘制直方图时未使用的其他信息 |
3-2 散点图
利用scatter函数即可绘制散点图
代码如下:
import matplotlib.pyplot as plt
# 示例数据
x = [1, 2, 3, 4, 5]
y1 = [2.2, 2.8, 2.5, 4.5, 6.7]
y2 = [5.7,5.9,7.8,6.3,4.9]
# 绘制散点图
# 绘制第一个散点图
plt.scatter(x, y1, color='blue', label='Group1', alpha=0.7, s=100)
# 绘制第二个散点图
plt.scatter(x, y2, color='green', label='Group2', alpha=0.7, s=100)
# 添加标题和标签
plt.title('dot')
plt.xlabel('X')
plt.ylabel('Y')
# 添加图例
plt.legend()
# 显示图形
plt.show()
3-3 气泡图
可以用来表示三维甚至四维的数据,其中可以表示数据维度的方式有
x
x
x,
y
y
y轴,颜色和气泡的大小。
代码如下:
import numpy as np
import matplotlib.pyplot as plt
# 示例数据
x = np.array([1, 2, 3, 4, 5,6])
y = np.array([12, 10, 5, 15, 7, 9])
sizes = x * y * 10 # 意思是气泡大小是x,y的函数,可以替换成z
# 绘制气泡图
plt.scatter(x, y, s=sizes, c=sizes,cmap='viridis', alpha=0.7, edgecolor='black')
# 添加标题和标签
plt.title('bubble')
plt.xlabel('X')
plt.ylabel('Y')
# 添加颜色条
plt.colorbar(label='sizes')
# 显示图形
plt.show()
3-4 热力图
(1)矩阵热力图
矩阵热力图一般用来表示皮尔逊相关系数,所以应该放到第四章《联系图》里面的,但是其他热力图还是表示分布多一点,不想拆开热力图板块就放这里吧。
作者在pycharm画这个热力图的时候还遇到了个小问题,单元格只显示第一行的数据,如果各位也出现过这个问题,可以试试更新seaborn到最新版本。terminal输入下面语句使得seaborn和matplotlib得以兼容:
pip install --upgrade seaborn |
---|
代码如下:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
# 创建一个数据集,指定列标签和行标签
df = pd.DataFrame(np.random.random((5, 5)),
columns=["a", "b", "c", "d", "e"],
index=["a", "b", "c", "d", "e"])
# 绘制热力图
sns.heatmap(df, cmap='YlGnBu', annot=True, vmin=0, vmax=1)
# 添加标题和标签
plt.title("Heatmap Example")
plt.xlabel("X-axis Label")
plt.ylabel("Y-axis Label")
# 显示图形
plt.show()
对于重要API:
sns.heatmap(df, cmap=‘YlGnBu’, annot=True, vmin=0, vmax=1) |
---|
输入参数 | 解释 |
---|---|
df | 这是你要绘制热力图的数据框(DataFrame),它是一个二维的数组或数据表,其中包含要在热力图中显示的数据(一般来说是皮尔逊相关系数矩阵) |
cmap=‘YlGnBu’ | ‘YlGnBu’ :从黄色(Yl)到绿色(Gn)再到蓝色(Bu)。其他颜色映射还有 ‘viridis’、‘plasma’、‘coolwarm’ 等 |
annot | annot 参数设置为 True,表示在每个单元格中显示数据值。 |
vmin=0 | vmin 参数设置颜色映射的最小值。热力图的颜色将从这个值开始,低于这个值的数据将使用最小颜色。这里设置为 0,表示颜色映射的起始值是 0 |