专门做美食的网站,全国水利建设市场信用信息平台门户网站,发布网站后备案,百度导航下载2022最新版官网Seaborn的主要思想是用高级命令为统计数据探索和统计模型拟合创建各种图形#xff0c;下面将介绍一些Seaborn中的数据集和图形类型。
虽然所有这些图形都可以用Matplotlib命令实现#xff08;其实Matplotlib就是Seaborn的底层#xff09;#xff0c;但是用 Seaborn API会更… Seaborn的主要思想是用高级命令为统计数据探索和统计模型拟合创建各种图形下面将介绍一些Seaborn中的数据集和图形类型。
虽然所有这些图形都可以用Matplotlib命令实现其实Matplotlib就是Seaborn的底层但是用 Seaborn API会更方便。
频次直方图、KDE和密度图
在进行统计数据可视化时我们通常想要的就是频次直方图和多变量的联合分布图。在Matplotlib里面我们已经见过相对比较简单 data np.random.multivariate_normal([0, 0], [[5, 2], [2, 2]], size2000)data pd.DataFrame(data, columns[x, y])for col in xy:plt.hist(data[col], normedTrue, alpha0.5) 除了频次直方图我们还可以用KDE获取变量分布的平滑估计。在seaborn通过sns.kdeplot来实现 for col in xy:sns.kdeplot(data[col], shadeTrue) 使用distplot可以将频次直方图和KDE结合起来 sns.distplot(data[x])sns.distplot(data[y]) 如果向kdeplot输入的是二维数据集那么就可以获得一个二维数据可视化图sns.kdeplot(data) 矩阵图
当我们需要对多维数据进行可视化是最终都要使用矩阵图矩阵图对于探索多维数据不同维度间的相关性非常有效。
下面将用鸢尾花数据集来演示其中有三种鸢尾花的花瓣与花萼数据 data pd.read_csv(iris.csv)sns.pairplot(data,huespecies) #hue 选择分类列 分面频次直方图
有时观察数据最好的方法就是借助数据子集的频次直方图Seaborn的 FacetGrid函数让这件事变得非常简单。
来看看某个餐厅统计的服务员收取小费的数据 tips pd.read_csv(tips.csv)g sns.FacetGrid(tips, coltime, rowsmoker)g g.map(plt.hist, total_bill, colorr) 条形图
对于时间序列数据可以使用sns.factorplot画出条形图下面将使用行星数据来演示 planets pd.read_csv(planets.csv)with sns.axes_style(white):g sns.factorplot(year, dataplanets, aspect2,kindcount, colorsteelblue)g.set_xticklabels(step5) 还可以对用不同方法发现行星的数量 with sns.axes_style(white):g sns.factorplot(year, dataplanets, aspect4.0, kindcount,huemethod, orderrange(2001, 2015))g.set_ylabels(Number of Planets Discovered) 折线图
seaborn绘制折线图使用lineplot函数该函数所传数据必须为一个pandas数组这一点跟matplotlib里有较大的区别并且一开始使用较为复杂。
首先sns.lineplot里有几个参数值得注意 x:plot图的x轴label y:plot图的y轴label ci:与估计器聚合时绘制的置信区间的大小 data: 所传入的pandas数组。 x np.linspace(100, 50, 6)y np.array([0.194173876, 0.161086478, 0.138896531, 0.129826697, 0.133716787, 0.152458326])summary []for i in range(6):x_t x[i]y_t y[i]summary.append([x_t, y_t])data pd.DataFrame(summary )sns.lineplot(x0,y1,ciNone,datadata) 编程要求
Basemap是Matplotlib的一个子包负责地图绘制。在数据可视化过程中我们常需要将数据在地图上画出来。
比如说我们在地图上画出城市人口飞机航线军事基地矿藏分布等等。这样的地理绘图有助于读者理解空间相关的信息。
适用场景适用于有空间位置的数据集。
安装和使用
相对于其他工具Basemap用起来有点笨重就算做点儿简单的可视化图也需要花费比预期更长的时间。
在处理比较复杂的地图可视化任务时更现代的解决方案可能会更适用一些比如leaflet 、Google Maps API。然而Basemap 符合Python用户的使用习惯。
basemap并没有集成到matplotlib中需要我们手动安装basemap安装起来很简单这里就不在说明。
安装并导入basemap工具箱后只需要用几行代码就可以画出地理图 import matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemap#导入工具包plt.figure(figsize(8, 8))m Basemap(projectionortho, resolutionNone, lat_050, lon_0-100)m.bluemarble(scale0.5)plt.show() 运用Basemap函数我们可以在绘图区域中绘制地理信息相关的图像当参数 projection的值为ortho时我们将得到一个如上图所示的地球仪截面。 将参数projection的值设置为lcc时我们可以通过经纬度设置来得到某一区域的局部地图 fig plt.figure(figsize(8, 8))m Basemap(projectionlcc, resolutionNone,width8E6,height8E6,lat_045, lon_0-100,)m.etopo(scale0.5, alpha0.5)# 将经纬度映射为 (x, y) 坐标用于绘制图像x, y m(-122.3, 47.6)plt.plot(x, y, ok, markersize5)plt.text(x, y, Seattle, fontsize12) 这里使用了两个额外参数它们用来表示地图中心的纬度lat_0和经度 lon_0。
地图投影
由于不可能把地表完美反映到二维平面上所有的地图都是各种各样扭曲的产物把这些扭曲的产物抹平到平面坐标系的过程称为投影。
Basemap提供了几十种不同的投影的实现。
投影简写-全称对照
简写全称cylCylindrical EquidistantmercMercatortmercTransverse MercatoromercOblique MercatormillMiller CylindricalgallGall Stereographic CylindricalceaCylindrical Equal ArealccLambert ConformallaeaLambert Azimuthal Equal AreanplaeaNorth-Polar Lambert AzimuthalsplaeaSouth-Polar Lambert AzimuthaleqdcEquidistant ConicaeqdAzimuthal EquidistantnpaeqdNorth-Polar Azimuthal EquidistantspaeqdSouth-Polar Azimuthal EquidistantaeaAlbers Equal AreastereStereographicnpstereNorth-Polar StereographicspstereSouth-Polar StereographiccassCassini-SoldnerpolyPolyconicorthoOrthographicgeosGeostationarynsperNear-Sided PerspectivesinuSinusoidalmollMollweidehammerHammerrobinRobinsonkav7Kavrayskiy VIIeck4Eckert IVvandgvan der GrintenmbtfpqMcBryde-Thomas Flat-Polar QuarticgnomGnomonicrotpoleRotated Pole
下面我们对一常用的投影进行简单的演示。定义一个可以画带经纬线地图的简便方法 def draw_map(m, scale0.2):# 画地貌晕渲图m.shadedrelief(scalescale)# 用字典表示经纬度lats m.drawparallels(np.linspace(-90, 90, 13))lons m.drawmeridians(np.linspace(-180, 180, 13))# 字典的键是plt.Line2D示例lat_lines chain(*(tup[1][0] for tup in lats.items()))lon_lines chain(*(tup[1][0] for tup in lons.items()))all_lines chain(lat_lines, lon_lines)# 用循环将所有线设置成需要的样式for line in all_lines:line.set(linestyle-, alpha0.3, colorw)
圆柱投影是最简单的地图投影类型纬度线与经度线分别映射成水平线与竖直线。 采用这种投影类型的话赤道区域的显示效果非常好但是南北极附近的区域就会严重变形。 fig plt.figure(figsize(8, 6), edgecolorw)m Basemap(projectioncyl, resolutionNone,llcrnrlat-90, urcrnrlat90,llcrnrlon-180, urcrnrlon180, )draw_map(m) 这里basemap参数设置了左下角llcrnr和右上角urcrnr纬度lat和经度lon。不同的投影都有各种的优劣大家之后可以多多尝试。
地图背景
basemap程序包中有许多实用的函数可以画出各种地形的轮廓如陆地、海洋、湖泊、河流、各国的政治分界线。
常用画图函数
函数说明drawcoastlines()绘制大陆海岸线drawlsmask()为陆地与海洋设置填充色从而可以在陆地或海洋投影其他图像drawmapboundary()绘制地图边界包括为海洋填充颜色drawrivers()绘制河流fillcontinents()用一种颜色填充大陆用另一种颜色填充湖泊可选drawcountries()绘制国界线drawstates()绘制美国州界线drawcounties()绘制美国县界线drawgreatcircle()在两点之间绘制一个大圆drawparallels()绘制纬线drawmeridians()绘制经线drawmapscale()在地图上绘制一个线性比例尺bluemarble()绘制NASA 蓝色弹珠地球投影shadedrelief()在地图上绘制地貌晕渲图etopo()在地图上绘制地形晕渲图warpimage()将用户提供的图像投影到地图上
如果要使用边界特征就必须设置分辨率。通过resolution来设置分辨率取值为c原始分辨率、l低分辨率、i中分辨率、h高分辨率、f全画质分辨率。
来看看两种不同分辨率的绘制效果: fig, ax plt.subplots(1, 2, figsize(12, 8))for i, res in enumerate([l, h]):m Basemap(projectiongnom, lat_057.3, lon_0-6.2,width90000, height120000, resolutionres, axax[i])m.fillcontinents(color#FFDDCC, lake_color#DDEEFF)m.drawmapboundary(fill_color#DDEEFF)m.drawcoastlines()ax[i].set_title(resolution{0}.format(res));plt.show() 可以看出低分辨率不适合这个缩放低分辨率适合呈现全局视角而且加载速度比高分辨率更快。要呈现某一视角的适合最好先从一个能快速呈现的分辨率开始然后不断提高分辨率直到满意为止。
在地图上画数据
basemap还可以以地图为背景在这上面画各种数据。basemap实例中许多方法都是与地图有关的函数。这些函数与标准matplotlib函数的用法类似只是多了一个参数latlon。如果设置为true表示使用原来的经纬度坐标不使用投影(x,y)坐标。
示例如下 import pandas as pdcities pd.read_csv(california_cities.csv)# 提取我们感兴趣的数据lat cities[latd].valueslon cities[longd].valuespopulation cities[population_total].valuesarea cities[area_total_km2].values# 1. 绘制地图背景fig plt.figure(figsize(8, 8))m Basemap(projectionlcc, resolutionh, lat_037.5, lon_0-119,width1E6, height1.2E6)m.shadedrelief()m.drawcoastlines(colorgray)m.drawcountries(colorgray)m.drawstates(colorgray)# 2. 绘制城市数据的散点图其中颜色反映人口# 尺寸反映面积m.scatter(lon, lat, latlonTrue,cnp.log10(population), sarea,cmapReds, alpha0.5)# 3. 创建颜色条和图例plt.colorbar(labelr$\log_{10}({\rm population})$)plt.clim(3, 7)# 使用虚拟的点生成图例for a in [100, 300, 500]:plt.scatter([], [], ck, alpha0.5, sa,labelstr(a) km$^2$)plt.legend(scatterpoints1, frameonFalse,labelspacing1, loclower left); 编程要求