目录


【声明】:未经版权人书面许可,任何单位或个人不得以任何形式复制、发行、出租、改编、汇编、传播、展示或利用本博客的全部或部分内容,也不得在未经版权人授权的情况下将本博客用于任何商业目的。但版权人允许个人学习、研究、欣赏等非商业性用途的复制和传播。非常推荐大家学习《Python数据可视化科技图表绘制》这本书籍。
基础气泡图1
import matplotlib.pyplot as plt # 导入Matplotlib库并简写为plt
import seaborn as sns # 导入Seaborn库并简写为sns
from gapminder import gapminder # 导入数据集
plt.rcParams['figure.figsize'] = [8, 8] # 设置笔记本中的图形大小
data = gapminder.loc[gapminder.year == 2007] # 从数据集中选择特定年份的数据
# 使用scatterplot函数绘制气泡地图
sns.scatterplot(data=data, x="gdpPercap", y="lifeExp", size="pop",
legend=False, sizes=(20, 1600))
# 保存图片
plt.savefig("P160基础气泡图1_1.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
sns.set_style("darkgrid") # 设置Seaborn主题为"darkgrid"
# 使用scatterplot函数绘制气泡地图
sns.scatterplot(data=data, x="gdpPercap", y="lifeExp", size="pop",
hue="continent", palette="viridis",
edgecolor="blue", alpha=0.5, sizes=(10, 1600))
# 添加标题(主标题和轴标题)
plt.xlabel("Gdp per Capita") # x轴标题
plt.ylabel("Life Expectancy") # y轴标题
# 将图例放置在图形外部
plt.legend(bbox_to_anchor=(1, 1), loc='upper left', fontsize=15)
# 保存图片
plt.savefig("P160基础气泡图1_2.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
基础气泡图2
import pandas as pd # 导入Pandas库并简写为pd
import matplotlib.pyplot as plt # 导入Matplotlib库并简写为plt
data = pd.read_csv(r'E:\PythonProjects\experiments_figures\绘图案例数据\gapminderData.csv') # 读取数据
data.head(2) # 检查前两行数据
# 将分类列(continent)转换为数值型分组(group1->1,group2->2...)
data['continent'] = pd.Categorical(data['continent'])
plt.figure(figsize=(8, 6)) # 设置图形大小
data1952 = data[data.year == 1952] # 选取1952年的数据子集
# 绘制散点图
plt.scatter(
x=data1952['lifeExp'], # x轴为预期寿命
y=data1952['gdpPercap'], # y轴为人均GDP
s=data1952['pop'] / 50000, # 气泡大小与人口数量相关
c=data1952['continent'].cat.codes, # 根据大洲分类编码设置气泡颜色
cmap="Accent", # 使用Accent调色板
alpha=0.6, # 设置透明度
edgecolors="white", # 设置气泡边缘颜色
linewidth=2) # 设置气泡边缘线宽度
# 添加标题(主标题和轴标题)
plt.yscale('log') # 设置y轴为对数尺度
plt.xlabel("Life Expectancy") # x轴标题
plt.ylabel("GDP per Capita") # y轴标题
plt.title("Year 1952") # 主标题
plt.ylim(10, 50000) # 设置y轴范围
plt.xlim(30, 75) # 设置x轴范围
# 保存图片
plt.savefig("P162基础气泡图2.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
带边界的气泡图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import ConvexHull
# 步骤 1:准备数据
midwest = pd.read_csv(r"E:\PythonProjects\experiments_figures\绘图案例数据\midwest_filter.csv") # 导入数据
# 每个唯一 midwest['category']对应一个颜色
categories = np.unique(midwest['category']) # 获取唯一的类别
colors = [plt.cm.tab10(i / float(len(categories) - 1)) for i in
range(len(categories))] # 为每个类别选择颜色
# 步骤 2:绘制散点图,每个类别使用唯一颜色
fig = plt.figure(figsize=(10, 6), dpi=80, facecolor='w',
edgecolor='k') # 创建图形
for i, category in enumerate(categories):
# 假设 'dot_size' 是数据框中的一列
plt.scatter('area', 'poptotal',
data=midwest.loc[midwest.category == category, :],
s=midwest.loc[midwest.category == category, 'dot_size'], # 修复大小参数
color=colors[i], # 使用 color 参数代替 c 参数
label=str(category), edgecolors='black',
linewidths=.5, alpha=0.5) # 绘制气泡图
# 步骤 3:绘制围绕数据点的多边形
def encircle(x, y, ax=None, **kw):
if not ax: ax = plt.gca()
p = np.c_[x, y]
hull = ConvexHull(p)
poly = plt.Polygon(p[hull.vertices, :], **kw)
ax.add_patch(poly)
# 选择要绘制圈的数据
midwest_encircle_data = midwest.loc[midwest.state == 'IN', :]
# 绘制围绕数据点的多边形
encircle(midwest_encircle_data.area, midwest_encircle_data.poptotal,
ec="k", fc="gold", alpha=0.1)
encircle(midwest_encircle_data.area, midwest_encircle_data.poptotal,
ec="firebrick", fc="none", linewidth=1.5)
# 步骤 4:修饰图形
plt.gca().set(xlim=(0.0, 0.1), ylim=(0, 90000),
xlabel='Area', ylabel='Population') # 设置坐标轴的范围和标签
plt.xticks(fontsize=12)
plt.yticks(fontsize=12) # 设置刻度的字体大小
plt.title("Scatterplot of Midwest Area vs Population",
fontsize=18) # 设置标题
plt.legend(fontsize=12) # 显示图例
# 保存图片
plt.savefig("P163带边界的气泡图.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
极坐标下的气泡图
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(19781101) # 固定随机种子,以便结果可复现
# 计算面积和颜色
N = 150
r = 2 * np.random.rand(N)
theta = 2 * np.pi * np.random.rand(N)
area = 200 * r ** 2
colors = theta
# 创建第1个图形
fig = plt.figure()
ax = fig.add_subplot(projection='polar')
c = ax.scatter(theta, r, c=colors, s=area, cmap='hsv', alpha=0.75)
# 保存图片
plt.savefig("P164极坐标下的气泡图1.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
# 创建第2个图形
fig = plt.figure()
ax = fig.add_subplot(projection='polar')
c = ax.scatter(theta, r, c=colors, s=area, cmap='hsv', alpha=0.75)
# 设置极坐标原点的位置
ax.set_rorigin(-2.5)
ax.set_theta_zero_location('W', offset=10)
# 保存图片
plt.savefig("P164极坐标下的气泡图2.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
# 创建第3个图形
fig = plt.figure()
ax = fig.add_subplot(projection='polar')
c = ax.scatter(theta, r, c=colors, s=area, cmap='hsv', alpha=0.75)
# 设置极坐标角度的范围
ax.set_thetamin(45)
ax.set_thetamax(135)
# 保存图片
plt.savefig("P164极坐标下的气泡图3.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
等高线图1
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties
# 设置字体为支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 生成数据
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)
levels = np.linspace(-1, 1, 20) # 定义等高线水平
plt.contour(X, Y, Z, levels=levels) # 创建等高线图,并指定等级
# 添加标签和标题
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title('指定等级的等高线图')
# 保存图片
plt.savefig("P166等高线图1.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
等高线图2
import numpy as np
import matplotlib.pyplot as plt
delta = 0.0125 # 减小delta值,增加网格的间距
x = np.arange(-3.0, 3.0, delta) # 定义x范围为-3到3,间隔为delta
y = np.arange(-2.0, 2.0, delta) # 定义y范围为-2到2,间隔为delta
X, Y = np.meshgrid(x, y) # 生成网格坐标矩阵
Z1 = np.exp(-X ** 2 - Y ** 2) # 生成第1个二元正态分布数据
Z2 = np.exp(-(X - 1.5) ** 2 - (Y - 0.5) ** 2) # 生成第2个二元正态分布数据
# 高斯差分
Z = 10.0 * (Z2 - Z1) # 计算两个正态分布之间的差分值乘以10
plt.figure() # 创建新的图形窗口
CS = plt.contour(X, Y, Z) # 绘制等高线图
plt.clabel(CS, inline=1, fontsize=10) # 在等高线上添加标签,默认位置
plt.title('Simplest default with labels') # 设置标题
# 保存图片
plt.savefig("P167等高线图2.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
等高线图3
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.tri as tri
# 设置字体为支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
np.random.seed(19781101) # 固定随机种子,以便结果可复现
npts = 200
ngridx = 100
ngridy = 200
x = np.random.uniform(-2, 2, npts)
y = np.random.uniform(-2, 2, npts)
z = x * np.exp(-x ** 2 - y ** 2)
fig, (ax1, ax2) = plt.subplots(nrows=2, figsize=(6, 4), )
# 在网格上进行插值。通过在网格上进行插值,绘制不规则数据坐标的等高线图。
# 首先创建网格值。
xi = np.linspace(-2.1, 2.1, ngridx)
yi = np.linspace(-2.1, 2.1, ngridy)
# 在由 (xi,yi)定义的网格上线性插值数据 (x,y)。
triang = tri.Triangulation(x, y)
interpolator = tri.LinearTriInterpolator(triang, z)
Xi, Yi = np.meshgrid(xi, yi)
zi = interpolator(Xi, Yi)
# 注意,scipy.interpolate 提供了在网格上进行数据插值的方法。
# 下面的代码是对上面四行代码的替代写法:
# from scipy.interpolate import griddata
# zi=griddata((x,y),z,(xi[None,:],yi[:,None]),method='linear')
ax1.contour(xi, yi, zi, levels=14, linewidths=0.5, colors='k')
cntr1 = ax1.contourf(xi, yi, zi, levels=14, cmap="RdBu_r")
fig.colorbar(cntr1, ax=ax1)
ax1.plot(x, y, 'ko', ms=2)
ax1.set(xlim=(-2, 2), ylim=(-2, 2))
ax1.set_title('grid and contour (%d points,%d grid points)' %
(npts, ngridx * ngridy))
# 三角剖分等高线图
# 直接将无序的、不规则间隔的坐标提供给tricontour
ax2.tricontour(x, y, z, levels=14, linewidths=0.5, colors='k')
cntr2 = ax2.tricontourf(x, y, z, levels=14, cmap="RdBu_r")
fig.colorbar(cntr2, ax=ax2)
ax2.plot(x, y, 'ko', ms=2)
ax2.set(xlim=(-2, 2), ylim=(-2, 2))
ax2.set_title('tricontour (%d points' % npts)
plt.subplots_adjust(hspace=0.5)
# 保存图片
plt.savefig("P168等高线图3.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
三元相图
import matplotlib.pyplot as plt
from mpltern.datasets import get_dirichlet_pdfs
# 创建一个大图,并设置子图之间的间距
fig = plt.figure(figsize=(10.8, 8.8))
fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9,
wspace=0.5, hspace=0.5, )
# 设置不同的Dirichlet分布参数
alphas = ((1.5, 1.5, 1.5), (5.0, 5.0, 5.0), (1.0, 2.0, 2.0), (2.0, 4.0, 8.0))
# 在每个子图中绘制对应参数设置下的Dirichlet分布
for i, alpha in enumerate(alphas):
# 添加子图,使用三角图的投影
ax = fig.add_subplot(2, 2, i + 1, projection="ternary")
# 获取Dirichlet分布的PDF数据
t, l, r, v = get_dirichlet_pdfs(n=61, alpha=alpha)
# 绘制填充颜色表示PDF
cmap = "Blues"
shading = "gouraud"
cs = ax.tripcolor(t, l, r, v, cmap=cmap, shading=shading, rasterized=True)
# 绘制等高线以更清晰地显示PDF的形状
ax.tricontour(t, l, r, v, colors="k", linewidths=0.5)
# 设置轴标签
ax.set_tlabel("$x_1$")
ax.set_llabel("$x_2$")
ax.set_rlabel("$x_3$")
# 将轴标签放在三角图的内部
ax.taxis.set_label_position("tick1")
ax.laxis.set_label_position("tick1")
ax.raxis.set_label_position("tick1")
# 设置子图标题,显示参数设置
ax.set_title("${\\mathbf{\\alpha}}$=" + str(alpha))
# 添加颜色条,显示PDF的颜色对应的数值
cax = ax.inset_axes([1.05, 0.1, 0.05, 0.9], transform=ax.transAxes)
colorbar = fig.colorbar(cs, cax=cax)
colorbar.set_label("PDF", rotation=270, va="baseline")
# 保存图片
plt.savefig("P173三元相图.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
热图1
import pandas as pd # 导入pandas库,用于数据处理和分析
import seaborn as sns # 导入seaborn库,用于数据可视化
import matplotlib.pyplot as plt # 导入matplotlib库用于绘图
# 导入数据集
df=pd.read_csv("E:/PythonProjects/experiments_figures/绘图案例数据/mtcars.csv")
# 读取"mtcars.csv"的数据文件,并将数据存储在df中
# 删除非数值型的列
df_numeric = df.select_dtypes(include=['float64', 'int64'])
# 选择数据集中的数值型列(包括float64和int64类型),并存储在df_numeric中
# 绘制热力图,显示数值型列之间的相关性,使用'viridis'颜色映射,将相关性系数标注在图上
plt.figure(figsize=(10, 5), dpi=200) # 创建图形对象
sns.heatmap(df_numeric.corr(), xticklabels=df_numeric.corr().columns,
yticklabels=df_numeric.corr().columns,
cmap='viridis', center=0, annot=True) # 使用Seaborn绘制热力图
# 添加修饰
plt.title('Correlogram of mtcars', fontsize=18) # 设置图形标题
plt.xticks(fontsize=12) # 设置x轴标签的字体大小为12
plt.yticks(fontsize=12, rotation=0) # 设置y轴标签的字体大小为12
# 保存图片
plt.savefig('P289热图.png', dpi=600, transparent=True)
plt.show()
热图2
from mlxtend.plotting import heatmap
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 加载房价数据集,并设置列名
df = pd.read_csv(r'E:\PythonProjects\experiments_figures\绘图案例数据\housing.data.txt',
header=None, sep='\\s+')
df.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS',
'NOX', 'RM', 'AGE', 'DIS', 'RAD',
'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
df.head(2) # 输出略
from matplotlib import cm # 从Matplotlib库中导入颜色映射
cols = ['LSTAT', 'INDUS', 'NOX', 'RM', 'MEDV'] # 选择感兴趣的列
# 计算所选列的相关系数矩阵
corrmat = np.corrcoef(df[cols].values.T)
# 绘制热图并指定行名和列名
fig, ax = heatmap(corrmat, column_names=cols, row_names=cols, cmap=cm.PiYG)
# 将颜色条范围设置为-1到1
for im in ax.get_images():
im.set_clim(-1, 1)
# 保存图片
plt.savefig('P294热图6.png', dpi=600, transparent=True)
plt.show()
热图3
import matplotlib.pyplot as plt
import numpy as np
vegetables = ["cucumber", "tomato", "lettuce", "asparagus",
"potato", "wheat", "barley"]
farmers = ["Farmer Joe", "Upland Bros.", "Smith Gardening",
"Agrifun", "Organiculture", "BioGoods Ltd.", "Cornylee Corp."]
harvest = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0],
[2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0],
[1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0],
[0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0],
[0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0],
[1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1],
[0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])
fig, ax = plt.subplots(figsize=(5, 5)) # 创建图形和轴对象
im = ax.imshow(harvest) # 绘制热图
# 显示所有刻度,并使用对应的列表条目进行标注
ax.set_xticks(np.arange(len(farmers)))
ax.set_yticks(np.arange(len(vegetables)))
ax.set_xticklabels(farmers)
ax.set_yticklabels(vegetables)
# 旋转刻度标签并设置对齐方式
plt.setp(ax.get_xticklabels(), rotation=30, ha="right",
rotation_mode="anchor")
# 循环遍历数据维度并创建文本注释
for i in range(len(vegetables)):
for j in range(len(farmers)):
text = ax.text(j, i, harvest[i, j], ha="center", va="center", color="w")
# 设置标题和调整布局
ax.set_title("Harvest of local farmers (in tons/year)")
fig.tight_layout()
# 保存图片
plt.savefig('P295热图7.png', dpi=600, transparent=True)
plt.show()
&spm=1001.2101.3001.5002&articleId=151290631&d=1&t=3&u=57fb04f3a9b84f9f90d0e2b7b5ef162b)
997

被折叠的 条评论
为什么被折叠?



