拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Python数据可视化科技图表绘制系列教程(八)

目录基础气泡图1基础气泡图2带边界的气泡图极坐标下的气泡图等高线图1等高线图2等高线图3三元相图热图1热图2热图3【声明】未经版权人书面许可任何单位或个人不得以任何形式复制、发行、出租、改编、汇编、传播、展示或利用本博客的全部或部分内容也不得在未经版权人授权的情况下将本博客用于任何商业目的。但版权人允许个人学习、研究、欣赏等非商业性用途的复制和传播。非常推荐大家学习《Python数据可视化科技图表绘制》这本书籍。基础气泡图1import 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(datadata, xgdpPercap, ylifeExp, sizepop, legendFalse, sizes(20, 1600)) # 保存图片 plt.savefig(P160基础气泡图1_1.png, dpi600, bbox_inchestight, transparentTrue) plt.show() sns.set_style(darkgrid) # 设置Seaborn主题为darkgrid # 使用scatterplot函数绘制气泡地图 sns.scatterplot(datadata, xgdpPercap, ylifeExp, sizepop, huecontinent, paletteviridis, edgecolorblue, alpha0.5, sizes(10, 1600)) # 添加标题主标题和轴标题 plt.xlabel(Gdp per Capita) # x轴标题 plt.ylabel(Life Expectancy) # y轴标题 # 将图例放置在图形外部 plt.legend(bbox_to_anchor(1, 1), locupper left, fontsize15) # 保存图片 plt.savefig(P160基础气泡图1_2.png, dpi600, bbox_inchestight, transparentTrue) plt.show()基础气泡图1_1基础气泡图1_2基础气泡图2import pandas as pd # 导入Pandas库并简写为pd import matplotlib.pyplot as plt # 导入Matplotlib库并简写为plt data pd.read_csv(rE:\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( xdata1952[lifeExp], # x轴为预期寿命 ydata1952[gdpPercap], # y轴为人均GDP sdata1952[pop] / 50000, # 气泡大小与人口数量相关 cdata1952[continent].cat.codes, # 根据大洲分类编码设置气泡颜色 cmapAccent, # 使用Accent调色板 alpha0.6, # 设置透明度 edgecolorswhite, # 设置气泡边缘颜色 linewidth2) # 设置气泡边缘线宽度 # 添加标题主标题和轴标题 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, dpi600, bbox_inchestight, transparentTrue) plt.show()基础气泡图2带边界的气泡图import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy.spatial import ConvexHull # 步骤 1准备数据 midwest pd.read_csv(rE:\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), dpi80, facecolorw, edgecolork) # 创建图形 for i, category in enumerate(categories): # 假设 dot_size 是数据框中的一列 plt.scatter(area, poptotal, datamidwest.loc[midwest.category category, :], smidwest.loc[midwest.category category, dot_size], # 修复大小参数 colorcolors[i], # 使用 color 参数代替 c 参数 labelstr(category), edgecolorsblack, linewidths.5, alpha0.5) # 绘制气泡图 # 步骤 3绘制围绕数据点的多边形 def encircle(x, y, axNone, **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, eck, fcgold, alpha0.1) encircle(midwest_encircle_data.area, midwest_encircle_data.poptotal, ecfirebrick, fcnone, linewidth1.5) # 步骤 4修饰图形 plt.gca().set(xlim(0.0, 0.1), ylim(0, 90000), xlabelArea, ylabelPopulation) # 设置坐标轴的范围和标签 plt.xticks(fontsize12) plt.yticks(fontsize12) # 设置刻度的字体大小 plt.title(Scatterplot of Midwest Area vs Population, fontsize18) # 设置标题 plt.legend(fontsize12) # 显示图例 # 保存图片 plt.savefig(P163带边界的气泡图.png, dpi600, bbox_inchestight, transparentTrue) 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(projectionpolar) c ax.scatter(theta, r, ccolors, sarea, cmaphsv, alpha0.75) # 保存图片 plt.savefig(P164极坐标下的气泡图1.png, dpi600, bbox_inchestight, transparentTrue) plt.show() # 创建第2个图形 fig plt.figure() ax fig.add_subplot(projectionpolar) c ax.scatter(theta, r, ccolors, sarea, cmaphsv, alpha0.75) # 设置极坐标原点的位置 ax.set_rorigin(-2.5) ax.set_theta_zero_location(W, offset10) # 保存图片 plt.savefig(P164极坐标下的气泡图2.png, dpi600, bbox_inchestight, transparentTrue) plt.show() # 创建第3个图形 fig plt.figure() ax fig.add_subplot(projectionpolar) c ax.scatter(theta, r, ccolors, sarea, cmaphsv, alpha0.75) # 设置极坐标角度的范围 ax.set_thetamin(45) ax.set_thetamax(135) # 保存图片 plt.savefig(P164极坐标下的气泡图3.png, dpi600, bbox_inchestight, transparentTrue) plt.show()极坐标下的气泡图1极坐标下的气泡图2极坐标下的气泡图3等高线图1import 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, levelslevels) # 创建等高线图并指定等级 # 添加标签和标题 plt.xlabel(X轴) plt.ylabel(Y轴) plt.title(指定等级的等高线图) # 保存图片 plt.savefig(P166等高线图1.png, dpi600, bbox_inchestight, transparentTrue) plt.show()等高线图1等高线图2import 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, inline1, fontsize10) # 在等高线上添加标签默认位置 plt.title(Simplest default with labels) # 设置标题 # 保存图片 plt.savefig(P167等高线图2.png, dpi600, bbox_inchestight, transparentTrue) plt.show()等高线图2等高线图3import 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(nrows2, 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 # zigriddata((x,y),z,(xi[None,:],yi[:,None]),methodlinear) ax1.contour(xi, yi, zi, levels14, linewidths0.5, colorsk) cntr1 ax1.contourf(xi, yi, zi, levels14, cmapRdBu_r) fig.colorbar(cntr1, axax1) ax1.plot(x, y, ko, ms2) 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, levels14, linewidths0.5, colorsk) cntr2 ax2.tricontourf(x, y, z, levels14, cmapRdBu_r) fig.colorbar(cntr2, axax2) ax2.plot(x, y, ko, ms2) ax2.set(xlim(-2, 2), ylim(-2, 2)) ax2.set_title(tricontour (%d points % npts) plt.subplots_adjust(hspace0.5) # 保存图片 plt.savefig(P168等高线图3.png, dpi600, bbox_inchestight, transparentTrue) plt.show()等高线图3三元相图import matplotlib.pyplot as plt from mpltern.datasets import get_dirichlet_pdfs # 创建一个大图并设置子图之间的间距 fig plt.figure(figsize(10.8, 8.8)) fig.subplots_adjust(left0.1, right0.9, bottom0.1, top0.9, wspace0.5, hspace0.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, projectionternary) # 获取Dirichlet分布的PDF数据 t, l, r, v get_dirichlet_pdfs(n61, alphaalpha) # 绘制填充颜色表示PDF cmap Blues shading gouraud cs ax.tripcolor(t, l, r, v, cmapcmap, shadingshading, rasterizedTrue) # 绘制等高线以更清晰地显示PDF的形状 ax.tricontour(t, l, r, v, colorsk, linewidths0.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], transformax.transAxes) colorbar fig.colorbar(cs, caxcax) colorbar.set_label(PDF, rotation270, vabaseline) # 保存图片 plt.savefig(P173三元相图.png, dpi600, bbox_inchestight, transparentTrue) plt.show()三元相图热图1import pandas as pd # 导入pandas库用于数据处理和分析 import seaborn as sns # 导入seaborn库用于数据可视化 import matplotlib.pyplot as plt # 导入matplotlib库用于绘图 # 导入数据集 dfpd.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), dpi200) # 创建图形对象 sns.heatmap(df_numeric.corr(), xticklabelsdf_numeric.corr().columns, yticklabelsdf_numeric.corr().columns, cmapviridis, center0, annotTrue) # 使用Seaborn绘制热力图 # 添加修饰 plt.title(Correlogram of mtcars, fontsize18) # 设置图形标题 plt.xticks(fontsize12) # 设置x轴标签的字体大小为12 plt.yticks(fontsize12, rotation0) # 设置y轴标签的字体大小为12 # 保存图片 plt.savefig(P289热图.png, dpi600, transparentTrue) plt.show()热图1热图2from mlxtend.plotting import heatmap import matplotlib.pyplot as plt import numpy as np import pandas as pd # 加载房价数据集并设置列名 df pd.read_csv(rE:\PythonProjects\experiments_figures\绘图案例数据\housing.data.txt, headerNone, 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_namescols, row_namescols, cmapcm.PiYG) # 将颜色条范围设置为-1到1 for im in ax.get_images(): im.set_clim(-1, 1) # 保存图片 plt.savefig(P294热图6.png, dpi600, transparentTrue) plt.show()热图2热图3import 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(), rotation30, haright, rotation_modeanchor) # 循环遍历数据维度并创建文本注释 for i in range(len(vegetables)): for j in range(len(farmers)): text ax.text(j, i, harvest[i, j], hacenter, vacenter, colorw) # 设置标题和调整布局 ax.set_title(Harvest of local farmers (in tons/year)) fig.tight_layout() # 保存图片 plt.savefig(P295热图7.png, dpi600, transparentTrue) plt.show()热图3
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门