活动介绍
file-type

Python绘图库matplotlib cmap参数使用教程

7Z文件

下载需积分: 1 | 13KB | 更新于2024-11-29 | 114 浏览量 | 1 下载量 举报 收藏
download 立即下载
在数据分析和科学计算领域,Python 绘图库matplotlib是一个非常强大的工具,尤其在创建各种图表如折线图、柱状图、饼图和热力图等。本文将专注于matplotlib中的cmap参数,这是一个用于定义颜色映射(colormap)的参数,它允许我们通过不同的颜色来表示热力图中的数值范围,使得热力图的信息传达更加直观和有效。 1. cmap 参数概述 在matplotlib中,colormap(颜色映射)是一系列颜色的集合,它可以将数据集中的一组数值映射到特定的颜色上。在热力图的显示中,不同的数据值会被映射到不同的颜色,从而形成从一种颜色平滑过渡到另一种颜色的效果。cmap参数正是控制这种颜色映射的关键。 2. cmap 参数的种类 matplotlib提供了多种内置的colormap,包括但不限于以下几种: - 'viridis':默认的colormap,从黄色过渡到紫色,具有良好的色彩对比度和色彩的均匀分布。 - 'plasma':颜色从黑色过渡到白色,中间包含从蓝到红的渐变。 - 'inferno':从黑色到黄色的强烈过渡,适合表达高动态范围的数据。 - 'magma':从黑色到亮红色的渐变,适用于高温数据的可视化。 - 'cividis':专为色盲设计的颜色映射,具有较好的色彩区分度。 - 'coolwarm':从青色到红色的渐变,对比鲜明。 每种colormap都有其特定的应用场景和适用数据类型,选择合适的colormap可以使图表的信息更加突出。 3. cmap 参数在热力图中的应用 在使用matplotlib绘制热力图时,通常会用到imshow函数。imshow函数用于将矩阵数据以图像的形式显示出来,而cmap参数则是用于指定该图像的颜色映射。以下是使用cmap参数绘制热力图的基本步骤: 首先,需要导入必要的库,如numpy和matplotlib.pyplot: ```python import numpy as np import matplotlib.pyplot as plt ``` 然后,生成或准备一个二维数组数据,作为热力图的数值基础: ```python data = np.random.rand(10, 10) # 随机生成一个10x10的二维数组 ``` 接着,使用imshow函数绘制热力图,并指定cmap参数: ```python plt.imshow(data, cmap='viridis') # 使用viridis颜色映射 ``` 最后,显示图像: ```python plt.show() ``` 通过调整cmap参数,我们可以为热力图选择不同的颜色映射,从而达到理想的视觉效果。 4. 自定义cmap参数 除了matplotlib内置的colormap之外,用户也可以自定义colormap,以便根据特定需求设计颜色映射方案。自定义colormap可以通过colors模块中的LinearSegmentedColormap类来实现,例如: ```python from matplotlib.colors import LinearSegmentedColormap cdict = {'red': [(0.0, 0.0, 0.0), (0.5, 1.0, 1.0), (1.0, 1.0, 1.0)], 'green': [(0.0, 0.0, 0.0), (0.5, 0.0, 0.0), (1.0, 1.0, 1.0)], 'blue': [(0.0, 0.0, 0.0), (0.5, 0.0, 0.0), (1.0, 1.0, 1.0)]} my_cmap = LinearSegmentedColormap('my_colormap', cdict, N=256) ``` 这段代码创建了一个名为'my_colormap'的自定义colormap,并通过imshow函数应用到热力图中。 总结:matplotlib中的cmap参数为数据的可视化提供了强大的颜色映射功能,使得热力图等图表能够更加生动和直观地展示数据的特性。掌握cmap参数的使用,对于提高数据可视化的效果至关重要。

相关推荐

filetype

import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn import tree # 生成所有测试样本点 def make_meshgrid(x, y, h=.02): x_min, x_max = x.min() - 1, x.max() + 1 y_min, y_max = y.min() - 1, y.max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) return xx, yy # 对测试样本进行预测,并显示 def plot_test_results(ax, clf, xx, yy, **params): Z = clf.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) ax.contourf(xx, yy, Z, **params) # 载入iris数据集(只使用前面连个特征) iris = datasets.load_iris() X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size = 0.20,random_state = 20) # 创建并训练决策树 clf = tree.DecisionTreeClassifier() # 决策树分类器 clf = clf.fit(X_train,y_train) # 生成所有测试样本点 plt.figure(dpi=200) # feature_names=iris.feature_names设置决策树中显示的特征名称 tree.plot_tree(clf,feature_names=iris.feature_names,class_names=iris.target_names) # 显示测试样本的分类结果 title = ('DecisionTreeClassifier') fig, ax = plt.subplots(figsize = (5, 5)) plt.subplots_adjust(wspace=0.4, hspace=0.4) plot_test_results(ax, clf, xx, yy, cmap=plt.cm.coolwarm, alpha=0.8) # 显示训练样本 ax.scatter(X0, X1, c=y, cmap=plt.cm.coolwarm, s=20, edgecolors='k') ax.set_xlim(xx.min(), xx.max()) ax.set_ylim(yy.min(), yy.max()) ax.set_xlabel('x1') ax.set_ylabel('x2') ax.set_xticks(()) ax.set_yticks(()) ax.set_title(title) plt.show()

filetype

“import cartopy.crs as ccrs import numpy as np import cartopy.feature as cfeat from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER from cartopy.io.shapereader import Reader import matplotlib.ticker as mticker import cartopy.io.img_tiles as cimgt import matplotlib.pyplot as plt from scipy.cluster.hierarchy import linkage from scipy.cluster.hierarchy import fcluster import pandas as pd from sklearn.preprocessing import StandardScaler import matplotlib plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False fp = r"D:\py_work\分区\气象数据\分区指标数值(海拔).xlsx" #上面代码 fp = r"标准化指标路径" df = pd.read_excel(fp, header=None) X = df.values X = X[1:, 0:7] # 切片第一列到第三列,左开右闭 transfer = StandardScaler() data = pd.DataFrame(transfer.fit_transform(X)) k = 3 Z = linkage(X, method='ward', metric='euclidean') print(Z.shape) labels_2 = fcluster(Z, t=k, criterion='maxclust') print(labels_2[: 100]) abx = plt.subplot(projection='3d') # 创建一个三维的绘图工程 abx.set_title('3d_image_show') # 设置本图名称 # abx.scatter(X[:, 0], X[:, 1], X[:, 2], c=labels_2, cmap='prism') # 绘制数据点 c: 'r'红色,'y'黄色,等颜色 colors = ['green', 'blue', 'yellow', 'red', 'cyan', 'black'] abx.scatter(X[:, 0], X[:, 1], X[:, 2], c=labels_2, cmap=matplotlib.colors.ListedColormap(colors)) # prism,plt.cm.Spectral,flag,Set1,gist_ncar,nipy_spectral, abx.set_xlabel('X') # 设置x坐标轴 abx.set_ylabel('Y') # 设置y坐标轴 abx.set_zlabel('Z') # 设置z坐标轴 #shp_path = r"F:\Python\shp\qh\630000_full_qinghai.shp" # 确定shp文件地址 shp_path = r"D:\py_work\分区\代码\qh\630000_full_qinghai.shp" # 确定shp文件地址 proj = ccrs.PlateCarree() # 简写投影 fig = plt.figure(figsize=(12, 12), dpi=100) # 创建画布 ax = fig.subplots(1, 1, subplot_kw={'projection': proj}) # 创建子图 # 底图 四选一 # backmap=cimgt.OSM() # backmap=cimgt.Stamen() backmap = cimgt.Stamen('terrain-background') ###更换 # backmap = cimgt.QuadtreeTiles() ax.add_image(backmap, 6) # 数字为缩放比例,数值越大,地图越精细 extent = [89.401764, 103.068897, 31.600668, 39.212599] # 限定绘图范围 reader = Reader(s

filetype

你是一位matlab与python代码资深专家,要求将下列python代码改为matlab代码,不要报错 ##import numpy as npimport matplotlib.pyplot as plt# 中文的使用import matplotlib as mplmpl.rcParams["font.sans-serif"]=["kaiti"]mpl.rcParams["axes.unicode_minus"]=Falsefrom matplotlib import cbookfrom matplotlib import cmfrom matplotlib.colors import LightSourceimport pandas as pdfrom mpl_toolkits.mplot3d import axes3ddata = pd.read_excel(r"E:\zm\附件.xlsx",index_col=0) # 《《《《要改路径z = data.valuesz = z.max()-z# Load and format datanrows, ncols = z.shapex = np.linspace(0, 4, ncols)y = np.linspace(0, 5, nrows)x, y = np.meshgrid(x, y)# region = np.s_[5:50, 5:50]# x, y, z = x[region], y[region], z[region]# Set up plotfig, ax = plt.subplots(subplot_kw=dict(projection='3d'))ls = LightSource(270, 45)# To use a custom hillshading mode, override the built-in shading and pass# in the rgb colors of the shaded surface calculated from "shade".rgb = ls.shade(z, cmap=cm.gist_earth, vert_exag=0.1, blend_mode='soft')surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, facecolors=rgb,linewidth=0, antialiased=False, shade=False)ax.set_zticks(np.linspace(0,z.max(),8),np.round(np.linspace(0,z.max(),8)[::-1],2))#plt.savefig(r"E:\zm\1.png",dpi = 1000)plt.show()import numpy as npimport pandas as pdDe = lambda D0,y,ap,bp:D0-y*np.sin((bp-90)*np.pi/180)*np.tan(ap*np.pi/180)D =lambda x,De,po:(De-x*np.tan(po*np.pi/180))po = lambda ap,bp: np.arctan(np.cos((bp-90)*np.pi/180)*np.tan(ap*np.pi/180))*180/np.piW = lambda D,x,po: (D-x*np.tan(po*np.pi/180))*(np.sin((th/2)*np.pi/180)/np.sin((90-po-th/2)*np.pi/180)+np.sin((th/2)*np.pi/180)/np.sin((90+po-th/2)*np.pi/180))*np.cos((po)*np.pi/180)YT= lambda d,po: d*(np.sin((90+th/2)*np.pi/180)/np.sin((90-th/2-po)*np.pi/180))*np.cos(po*np.pi/180)y = np.arange(0,2.4,0.3)*1852apk = [0.39983871280891276]D0 = 84.4th = 120dd = [0]while dd[-1]<((5+5-3.3999999999999995)*4/((5-3.3999999999999995)**2+4**2)**0.5)*1852: di = np.arange(0,1000,1) dd+= [dd[-1]+di[np.argmin(np.abs((W(D0,dd[-1]+di,apk[-1])-YT(di,apk[-1]))/W(D0,dd[-1]+di,apk[-1]))-0.1)]] print(dd[-1]) #apk += [apk[-1] -(apk[0]-0.3)*dd[-1]/(5*4/((5-3.3999999999999995)**2+4**2)**0.5)*1852]# dd = [257.95,1257.94,2257.9300000000003,3087.21,4087.2,5087.19,6087.179999999999,7087.169999999999,7506.629999999999,8506.619999999999]# print(dd)xx = 5 - (np.array(dd)*((5-3.3999999999999995)**2+4**2)**0.5/4)/1852# xx = [4.84998885,4.26844339,3.68689793,3.20462909,2.62308363,2.04153817,1.45999271,0.87844725,0.63450975,0.05296429]# while xx[-1]>3.3999999999999995-5:# xx += [xx[-1]-(0.63450975-0.05296429)]print(xx)

听风二里
  • 粉丝: 4246
上传资源 快速赚钱