知行编程网知行编程网  2022-06-12 05:00 知行编程网 隐藏边栏 |   抢沙发  8 
文章评分 0 次,平均分 0.0
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!

平时总是眼馋网易数读DT财经的各种精美可视化图,又限于自己手残学不会AdoeIllutrator。
不过相信你们看完今天的文章之后,就知道掌握了Matplotlib,好看的数据可视化咱也可以做了!!!

一、简介

前不久「贝壳研究院」基于其丰富的房地产相关数据资源,发布了「2020 新一线城市居住报告」:
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图1
而在这个报告中有几张数据可视化作品还是比较可圈可点的,作为(在模仿中精进数据可视化)系列文章的开篇之作,我将基于我观察原始数据可视化作品进而构思出的方式,以纯Python的方式模仿复刻图2所示作品:
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图2

二、复刻过程

2.1 观察原作品

其实原作品咋一看上去有点复杂,但经过观察,将原始图片主要元素拆分成几个部分来构思复现方式,还是不算复杂的,我总结为以下几部分:
  • 1 坐标系部分
稍微懂点数据可视化的人应该都可以看出原作品的坐标不是常规的笛卡尔坐标系,而是极坐标系,这里复现原作品极坐标系的难点在于,其并不是完整的极坐标系,即左边略小于半圆的区域是隐藏了参考线的。因此与其在matplotlib中极坐标系的基础上想方法隐藏部分参考线,不如逆向思维,从构造参考线的角度出发,自己组织构造参考线,会更加的自由和灵活。
  • 2 颜色填充
这里的「颜色填充」指的是以居住自由指数折线为中线,在购房自由指数折线与租房自由指数折线之间的颜色填充区域,但困难的是这里当购房自由指数高于租房自由指数时对应的颜色为浅蓝绿色,而反过来则变为灰色,与购房自由指数租房自由指数的颜色相呼应。
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图3

2.2 开始动手!

综合考虑前面这些难点,我决定借助matplotlib+geopandas+shapely操纵几何对象和绘制调整图像的方便快捷性,来完成这次的挑战。

2.2.1 构建坐标系统

因为极坐标系中的参考线非常类似俯视南北极点所看到的经纬线,因此我们可以利用地图学中坐标参考系里的「正射投影」(Orthographic),可以理解为纯粹的半球:
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图4
我们只需要设定中心点参数在南极点或北极点,再配合简单的经纬度相关知识就可以伪造出任意的经纬线,再利用geopandas中的投影变换向设定好的「正射投影」进行转换,再作为平面坐标进行绘图即可。譬如按照这个思路来创建东经10度到东经220度之间,以及南纬-90度到-80度之间,对应的5条纬度线和对应38个城市的经线:
<section style="overflow-x: auto;padding: 16px;background: rgb(39, 40, 34);color: rgb(221, 221, 221);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;border-radius: 0px;font-size: 12px;display: block;margin-left: 8px;margin-right: 8px;"><span style="color: #f92672;font-weight: bold;line-height: 26px;">import</span> geopandas <span style="color: #f92672;font-weight: bold;line-height: 26px;">as</span> gpd  <br  /><span style="color: #f92672;font-weight: bold;line-height: 26px;">from</span> shapely.geometry <span style="color: #f92672;font-weight: bold;line-height: 26px;">import</span> LineString, Point, Polygon  <br  /><span style="color: #f92672;font-weight: bold;line-height: 26px;">import</span> matplotlib.pyplot <span style="color: #f92672;font-weight: bold;line-height: 26px;">as</span> plt  <br  /><span style="color: #f92672;font-weight: bold;line-height: 26px;">import</span> numpy <span style="color: #f92672;font-weight: bold;line-height: 26px;">as</span> np  <br  /><span style="color: #f92672;font-weight: bold;line-height: 26px;">import</span> warnings  <br  />  <br  />plt.rcParams[<span style="color: #a6e22e;line-height: 26px;">'font.sans-serif'</span>] = [<span style="color: #a6e22e;line-height: 26px;">'SimHei'</span>] <span style="color: #75715e;line-height: 26px;"># 解决matplotlib中文乱码问题  </span><br  />plt.rcParams[<span style="color: #a6e22e;line-height: 26px;">'axes.unicode_minus'</span>] = <span style="color: #f92672;font-weight: bold;line-height: 26px;">False</span> <span style="color: #75715e;line-height: 26px;"># 解决matplotlib负号显示问题  </span><br  />warnings.filterwarnings(<span style="color: #a6e22e;line-height: 26px;">'ignore'</span>)  <br  />  <br  /><span style="color: #75715e;line-height: 26px;"># 设置中心点在南极点的正射投影  </span><br  />crs = <span style="color: #a6e22e;line-height: 26px;">'+proj=ortho +lon_0=0 +lat_0=-90'</span>  <br  />  <br  /><span style="color: #75715e;line-height: 26px;"># 构建经度线并设置对应经纬度的地理坐标系  </span><br  />lng_lines = gpd.GeoDataFrame({  <br  />    <span style="color: #a6e22e;line-height: 26px;">'geometry'</span>: [LineString([[lng, <span style="line-height: 26px;">-90</span>], [lng, <span style="line-height: 26px;">-78</span>]]) <span style="color: #f92672;font-weight: bold;line-height: 26px;">for</span> lng <span style="color: #f92672;font-weight: bold;line-height: 26px;">in</span> np.arange(<span style="line-height: 26px;">10</span>, <span style="line-height: 26px;">220</span>, <span style="line-height: 26px;">210</span> / <span style="line-height: 26px;">38</span>)]},   <br  />    crs=<span style="color: #a6e22e;line-height: 26px;">'EPSG:4326'</span>)  <br  />  <br  /><span style="color: #75715e;line-height: 26px;"># 构建纬度线并设置为对应经纬度的地理坐标系  </span><br  />lat_lines = gpd.GeoDataFrame({  <br  />    <span style="color: #a6e22e;line-height: 26px;">'geometry'</span>: [LineString([[lng, lat] <span style="color: #f92672;font-weight: bold;line-height: 26px;">for</span> lng <span style="color: #f92672;font-weight: bold;line-height: 26px;">in</span> range(<span style="line-height: 26px;">10</span>, <span style="line-height: 26px;">220</span>)]) <span style="color: #f92672;font-weight: bold;line-height: 26px;">for</span> lat <span style="color: #f92672;font-weight: bold;line-height: 26px;">in</span> range(<span style="line-height: 26px;">-90</span>, <span style="line-height: 26px;">-79</span>, <span style="line-height: 26px;">2</span>)]},   <br  />    crs=<span style="color: #a6e22e;line-height: 26px;">'EPSG:4326'</span>)  <br  /></section>
构造好数据之后,将经线与纬线对应的GeoDataFrame转换到设置好的「正射投影crs上,再作为不同图层进行叠加绘制:
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图5
嘿嘿,是不是底层的参考线已经有内味了~

2.2.2 绘制指标折线

坐标系以及参考线的逻辑定了下来之后,接下来我们需要将原作品中所展现的3种指标数据转换为3条样式不同的折线。首先我们来准备数据,因为原报告中只能找到居住自由指数的具体数值,其他两个指标未提供,因此我们可以结合这3个数值的相互关系,推断出每个城市的购房自由指数租房自由指数1个比自身的居住自由指数高,1个比居住自由指数低的规律来「伪造」数据:
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图6
按照前面推断出的规则来伪造示例数据,并对伪造过程中的不合理数据进行修正:
<section style="overflow-x: auto;padding: 16px;background: rgb(39, 40, 34);color: rgb(221, 221, 221);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;border-radius: 0px;font-size: 12px;display: block;margin-left: 8px;margin-right: 8px;"><span style="line-height: 26px;"><span style="color: #f92672;font-weight: bold;line-height: 26px;">def</span> <span style="color: #a6e22e;font-weight: bold;line-height: 26px;">fake_index</span><span style="line-height: 26px;">(value)</span>:</span>  <br  />      <br  />    fake = []  <br  />    fake.append(value+np.random.uniform(<span style="line-height: 26px;">5</span>, <span style="line-height: 26px;">10</span>))  <br  />    fake.append(value-np.random.uniform(<span style="line-height: 26px;">5</span>, <span style="line-height: 26px;">10</span>))  <br  />      <br  />    <span style="color: #f92672;font-weight: bold;line-height: 26px;">return</span> np.random.choice(fake, size=<span style="line-height: 26px;">2</span>, replace=<span style="color: #f92672;font-weight: bold;line-height: 26px;">False</span>).tolist()  <br  />  <br  />data[<span style="color: #a6e22e;line-height: 26px;">'购房自由指数'</span>], data[<span style="color: #a6e22e;line-height: 26px;">'租房自由指数'</span>] = list(zip(*data[<span style="color: #a6e22e;line-height: 26px;">'居住自由指数'</span>].apply(fake_index)))  <br  />  <br  /><span style="color: #75715e;line-height: 26px;"># 修正伪造数据中大于100和小于0的情况  </span><br  />data.loc[:, <span style="color: #a6e22e;line-height: 26px;">'居住自由指数'</span>:] = data.loc[:, <span style="color: #a6e22e;line-height: 26px;">'居住自由指数'</span>:].applymap(<span style="color: #f92672;font-weight: bold;line-height: 26px;">lambda</span> v: <span style="line-height: 26px;">100</span> <span style="color: #f92672;font-weight: bold;line-height: 26px;">if</span> v > <span style="line-height: 26px;">100</span> <span style="color: #f92672;font-weight: bold;line-height: 26px;">else</span> v)  <br  />data.loc[:, <span style="color: #a6e22e;line-height: 26px;">'居住自由指数'</span>:] = data.loc[:, <span style="color: #a6e22e;line-height: 26px;">'居住自由指数'</span>:].applymap(<span style="color: #f92672;font-weight: bold;line-height: 26px;">lambda</span> v: <span style="line-height: 26px;">0</span> <span style="color: #f92672;font-weight: bold;line-height: 26px;">if</span> v < <span style="line-height: 26px;">0</span> <span style="color: #f92672;font-weight: bold;line-height: 26px;">else</span> v)  <br  />data.head()  <br  /></section>
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图7
至此我们的数据已经伪造完成,接下来我们需要做的事情是对我们的指标值进行变换,使其能够适应前面所确立的坐标系统。虽然严格意义上说俯视南极点所看到的每一段等间距的纬度带随着其越发靠近赤道,在平面上会看起来越来越窄,但因为我们选取的是南纬-90度到南纬-80度之间的区域,非常靠近极点,因此可以近似视为每变化相同纬度宽度是相等的。利用下面的函数实现0-100向-90到-80的线性映射:
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图8
接下来我们就来为每个指标构造线与散点部分的矢量数据,并在统一转换坐标参考系到「正射投影」之后叠加到之前的图像上:
<section style="overflow-x: auto;padding: 16px;background: rgb(39, 40, 34);color: rgb(221, 221, 221);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;border-radius: 0px;font-size: 12px;display: block;margin-left: 8px;margin-right: 8px;"><span style="color: #75715e;line-height: 26px;"># 为每个城市生成1条经线  </span><br  />lng_lines = gpd.GeoDataFrame({  <br  />    <span style="color: #a6e22e;line-height: 26px;">'geometry'</span>: [LineString([[lng, <span style="line-height: 26px;">-90</span>], [lng, <span style="line-height: 26px;">-78</span>]]) <span style="color: #f92672;font-weight: bold;line-height: 26px;">for</span> lng <span style="color: #f92672;font-weight: bold;line-height: 26px;">in</span> np.arange(<span style="line-height: 26px;">10</span>, <span style="line-height: 26px;">220</span>, <span style="line-height: 26px;">210</span> / data.shape[<span style="line-height: 26px;">0</span>])]},   <br  />    crs=<span style="color: #a6e22e;line-height: 26px;">'EPSG:4326'</span>)  <br  />  <br  /><span style="color: #75715e;line-height: 26px;"># 居住自由指数对应的折线  </span><br  />line1 = gpd.GeoDataFrame({  <br  />    <span style="color: #a6e22e;line-height: 26px;">'geometry'</span>: [LineString([(lng, lat) <span style="color: #f92672;font-weight: bold;line-height: 26px;">for</span> lng, lat <span style="color: #f92672;font-weight: bold;line-height: 26px;">in</span> zip(np.arange(<span style="line-height: 26px;">10</span>, <span style="line-height: 26px;">220</span>, <span style="line-height: 26px;">210</span> / data.shape[<span style="line-height: 26px;">0</span>]),  <br  />                                                            data[<span style="color: #a6e22e;line-height: 26px;">'居住自由指数_映射值'</span>])])]},   <br  />    crs=<span style="color: #a6e22e;line-height: 26px;">'EPSG:4326'</span>)  <br  />  <br  /><span style="color: #75715e;line-height: 26px;"># 居住自由指数对应的折线上的散点  </span><br  />scatter1 = gpd.GeoDataFrame({  <br  />    <span style="color: #a6e22e;line-height: 26px;">'geometry'</span>: [Point(lng, lat) <span style="color: #f92672;font-weight: bold;line-height: 26px;">for</span> lng, lat <span style="color: #f92672;font-weight: bold;line-height: 26px;">in</span> zip(np.arange(<span style="line-height: 26px;">10</span>, <span style="line-height: 26px;">220</span>, <span style="line-height: 26px;">210</span> / data.shape[<span style="line-height: 26px;">0</span>]),  <br  />                                                     data[<span style="color: #a6e22e;line-height: 26px;">'居住自由指数_映射值'</span>])]}, crs=<span style="color: #a6e22e;line-height: 26px;">'EPSG:4326'</span>)  <br  />  <br  /><span style="color: #75715e;line-height: 26px;"># 购房自由指数对应的折线  </span><br  />line2 = gpd.GeoDataFrame({  <br  />    <span style="color: #a6e22e;line-height: 26px;">'geometry'</span>: [LineString([(lng, lat) <span style="color: #f92672;font-weight: bold;line-height: 26px;">for</span> lng, lat <span style="color: #f92672;font-weight: bold;line-height: 26px;">in</span> zip(np.arange(<span style="line-height: 26px;">10</span>, <span style="line-height: 26px;">220</span>, <span style="line-height: 26px;">210</span> / data.shape[<span style="line-height: 26px;">0</span>]),  <br  />                                                            data[<span style="color: #a6e22e;line-height: 26px;">'购房自由指数_映射值'</span>])])]},   <br  />    crs=<span style="color: #a6e22e;line-height: 26px;">'EPSG:4326'</span>)  <br  />  <br  /><span style="color: #75715e;line-height: 26px;"># 购房自由指数对应的折线上的散点  </span><br  />scatter2 = gpd.GeoDataFrame({  <br  />    <span style="color: #a6e22e;line-height: 26px;">'geometry'</span>: [Point(lng, lat) <span style="color: #f92672;font-weight: bold;line-height: 26px;">for</span> lng, lat <span style="color: #f92672;font-weight: bold;line-height: 26px;">in</span> zip(np.arange(<span style="line-height: 26px;">10</span>, <span style="line-height: 26px;">220</span>, <span style="line-height: 26px;">210</span> / data.shape[<span style="line-height: 26px;">0</span>]),  <br  />                                                     data[<span style="color: #a6e22e;line-height: 26px;">'购房自由指数_映射值'</span>])]}, crs=<span style="color: #a6e22e;line-height: 26px;">'EPSG:4326'</span>)  <br  />  <br  />  <br  /><span style="color: #75715e;line-height: 26px;"># 租房自由指数对应的折线  </span><br  />line3 = gpd.GeoDataFrame({  <br  />    <span style="color: #a6e22e;line-height: 26px;">'geometry'</span>: [LineString([(lng, lat) <span style="color: #f92672;font-weight: bold;line-height: 26px;">for</span> lng, lat <span style="color: #f92672;font-weight: bold;line-height: 26px;">in</span> zip(np.arange(<span style="line-height: 26px;">10</span>, <span style="line-height: 26px;">220</span>, <span style="line-height: 26px;">210</span> / data.shape[<span style="line-height: 26px;">0</span>]),  <br  />                                                            data[<span style="color: #a6e22e;line-height: 26px;">'租房自由指数_映射值'</span>])])]},   <br  />    crs=<span style="color: #a6e22e;line-height: 26px;">'EPSG:4326'</span>)  <br  />  <br  /><span style="color: #75715e;line-height: 26px;"># 租房自由指数对应的折线上的散点  </span><br  />scatter3 = gpd.GeoDataFrame({  <br  />    <span style="color: #a6e22e;line-height: 26px;">'geometry'</span>: [Point(lng, lat) <span style="color: #f92672;font-weight: bold;line-height: 26px;">for</span> lng, lat <span style="color: #f92672;font-weight: bold;line-height: 26px;">in</span> zip(np.arange(<span style="line-height: 26px;">10</span>, <span style="line-height: 26px;">220</span>, <span style="line-height: 26px;">210</span> / data.shape[<span style="line-height: 26px;">0</span>]),  <br  />                                                     data[<span style="color: #a6e22e;line-height: 26px;">'租房自由指数_映射值'</span>])]}, crs=<span style="color: #a6e22e;line-height: 26px;">'EPSG:4326'</span>)  <br  />  <br  />                               <br  />fig, ax = plt.subplots(figsize=(<span style="line-height: 26px;">8</span>, <span style="line-height: 26px;">8</span>))  <br  />  <br  /><span style="color: #75715e;line-height: 26px;"># 绘制经度线与纬度线  </span><br  />ax = lng_lines.to_crs(crs).plot(ax=ax, linewidth=<span style="line-height: 26px;">0.4</span>, edgecolor=<span style="color: #a6e22e;line-height: 26px;">'lightgrey'</span>)  <br  />ax = lat_lines.to_crs(crs).plot(ax=ax, linewidth=<span style="line-height: 26px;">0.75</span>, edgecolor=<span style="color: #a6e22e;line-height: 26px;">'grey'</span>, alpha=<span style="line-height: 26px;">0.8</span>)  <br  />ax = line1.to_crs(crs).plot(ax=ax, color=<span style="color: #a6e22e;line-height: 26px;">'black'</span>, linewidth=<span style="line-height: 26px;">1</span>)  <br  />ax = scatter1.to_crs(crs).plot(ax=ax, color=<span style="color: #a6e22e;line-height: 26px;">'black'</span>, markersize=<span style="line-height: 26px;">12</span>)  <br  />ax = line2.to_crs(crs).plot(ax=ax, color=<span style="color: #a6e22e;line-height: 26px;">'#00CED1'</span>, linewidth=<span style="line-height: 26px;">0.6</span>)  <br  />ax = scatter2.to_crs(crs).plot(ax=ax, color=<span style="color: #a6e22e;line-height: 26px;">'#00CED1'</span>, markersize=<span style="line-height: 26px;">4</span>)  <br  />ax = line3.to_crs(crs).plot(ax=ax, color=<span style="color: #a6e22e;line-height: 26px;">'lightgrey'</span>, linewidth=<span style="line-height: 26px;">0.6</span>)  <br  />ax = scatter3.to_crs(crs).plot(ax=ax, color=<span style="color: #a6e22e;line-height: 26px;">'lightgrey'</span>, markersize=<span style="line-height: 26px;">4</span>)  <br  />ax.axis(<span style="color: #a6e22e;line-height: 26px;">'off'</span>); <span style="color: #75715e;line-height: 26px;"># 关闭坐标轴  </span><br  />  <br  />fig.savefig(<span style="color: #a6e22e;line-height: 26px;">'图11.png'</span>, dpi=<span style="line-height: 26px;">500</span>, inches_bbox=<span style="color: #a6e22e;line-height: 26px;">'tight'</span>, inches_pad=<span style="line-height: 26px;">0</span>)  <br  /></section>
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图9
哈哈,是不是更加有内味了~,至此,我们的绘制指标折线部分已完成。

2.2.3 绘制填充区域

在相继解决完「坐标系统」、「指标折线绘制」之后,就到了最好玩的部分了,接下来我们来绘制图中购房自由指数租房自由指数之间的折线,并且要按照「填充较大值对应色彩」的原则来处理,接下来我们需要用到一点简单的拓扑学知识,首先我们分别构造购房自由指数_映射值租房自由指数_映射值引入南极点后所围成的多边形:
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图10
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图11
接下来我们先暂停下来思考思考,购房自由指数_映射值租房自由指数_映射值之间彼此高低起伏交错而形成的填充区域对应着上面两个多边形之间的什么关系?没错!就是就是两者去除掉彼此重叠区域后各自剩余的部分!
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图12
那么接下来我们要做的事就so easy了,只需要分别得到两者去除重叠面后,剩余的部分,以对应的填充色彩叠加绘制在图11的图像上就可以啦~,利用geopandas中的difference即可轻松实现:
<section style="overflow-x: auto;padding: 16px;background: rgb(39, 40, 34);color: rgb(221, 221, 221);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;border-radius: 0px;font-size: 12px;display: block;margin-left: 8px;margin-right: 8px;">fig, ax = plt.subplots(figsize=(<span style="line-height: 26px;">8</span>, <span style="line-height: 26px;">8</span>))  <br  />  <br  /><span style="color: #75715e;line-height: 26px;"># 绘制经度线与纬度线  </span><br  />ax = lng_lines.to_crs(crs).plot(ax=ax, linewidth=<span style="line-height: 26px;">0.4</span>, edgecolor=<span style="color: #a6e22e;line-height: 26px;">'lightgrey'</span>)  <br  />ax = lat_lines.to_crs(crs).plot(ax=ax, linewidth=<span style="line-height: 26px;">0.75</span>, edgecolor=<span style="color: #a6e22e;line-height: 26px;">'grey'</span>, alpha=<span style="line-height: 26px;">0.8</span>)  <br  />ax = line1.to_crs(crs).plot(ax=ax, color=<span style="color: #a6e22e;line-height: 26px;">'black'</span>, linewidth=<span style="line-height: 26px;">1</span>)  <br  />ax = scatter1.to_crs(crs).plot(ax=ax, color=<span style="color: #a6e22e;line-height: 26px;">'black'</span>, markersize=<span style="line-height: 26px;">12</span>)  <br  />ax = line2.to_crs(crs).plot(ax=ax, color=<span style="color: #a6e22e;line-height: 26px;">'#00CED1'</span>, linewidth=<span style="line-height: 26px;">0.6</span>)  <br  />ax = scatter2.to_crs(crs).plot(ax=ax, color=<span style="color: #a6e22e;line-height: 26px;">'#00CED1'</span>, markersize=<span style="line-height: 26px;">4</span>)  <br  />ax = line3.to_crs(crs).plot(ax=ax, color=<span style="color: #a6e22e;line-height: 26px;">'lightgrey'</span>, linewidth=<span style="line-height: 26px;">0.6</span>)  <br  />ax = scatter3.to_crs(crs).plot(ax=ax, color=<span style="color: #a6e22e;line-height: 26px;">'lightgrey'</span>, markersize=<span style="line-height: 26px;">4</span>)  <br  />ax = polygon1.difference(polygon2).plot(ax=ax, color=<span style="color: #a6e22e;line-height: 26px;">'#00CED1'</span>, alpha=<span style="line-height: 26px;">0.2</span>)  <br  />polygon2.difference(polygon1).plot(ax=ax, color=<span style="color: #a6e22e;line-height: 26px;">'lightgrey'</span>, alpha=<span style="line-height: 26px;">0.6</span>)  <br  />ax.axis(<span style="color: #a6e22e;line-height: 26px;">'off'</span>); <span style="color: #75715e;line-height: 26px;"># 关闭坐标轴  </span><br  />  <br  />fig.savefig(<span style="color: #a6e22e;line-height: 26px;">'图13.png'</span>, dpi=<span style="line-height: 26px;">500</span>, inches_bbox=<span style="color: #a6e22e;line-height: 26px;">'tight'</span>, inches_pad=<span style="line-height: 26px;">0</span>)  <br  /></section>
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图13

2.2.4 补充文字、标注等元素

其实到这里,我们就已经完成了对原作品复刻的精髓部分了,剩下的无非是添加些文字、刻度之类的,其实这部分很多都可以在出图之后利用其他软件PS完成,比写代码轻松,所以这部分只对添加「城市+指标」的文字标签以及刻度值进行补充:
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图14
再模仿原作品裁切一下图片,主要元素是不是非常一致了~,大家也可以根据自己的喜好来修改不同的颜色:
原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!
图15
如果大家对本文的可视化代码感兴趣,可在后台回复 绘图” 获取。



原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!




<p style="max-width: 100%;min-height: 1em;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;caret-color: rgb(51, 51, 51);box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">程序员GitHub</strong>,现已正式上线!</span><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"  /></p><p style="max-width: 100%;min-height: 1em;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;caret-color: rgb(51, 51, 51);box-sizing: border-box !important;overflow-wrap: break-word !important;"><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"  /></p><p style="max-width: 100%;min-height: 1em;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;caret-color: rgb(51, 51, 51);box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;box-sizing: border-box !important;overflow-wrap: break-word !important;">接下来我们将会在该上,专注为大家分享GitHub上有趣的开源库包括Python,Java,Go,前端开发等优质的学习资源和技术,分享一些程序员圈的新鲜趣事。</span></p>



原来 Matplotlib 绘图也可以这么漂亮,这次真的是学习到了!




年度爆款文案

  • 1).卧槽!Pdf转Word用Python轻松搞定

  • 2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃

  • 3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密 

  • 4).80行代码!用Python做一个哆来A梦分身 

  • 5).你必须掌握的20个python代码,短小精悍,用处无穷 

  • 6).30个Python奇淫技巧集 

  • 7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货 

  • 8).再见Python!我要学Go了!2500字深度分析!

  • 9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片


<section data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-tools="135编辑器" data-id="93743" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-mpa-template="t" mpa-from-tpl="t" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-mpa-template="t" mpa-from-tpl="t" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-mpa-template="t" mpa-from-tpl="t" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-author="Wxeditor" style="padding-right: 0.5em;padding-left: 0.5em;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><pre style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-mpa-template="t" mpa-from-tpl="t" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(168, 168, 168)" data-darkmode-original-color-15923650965579="rgb(62, 62, 62)" data-style="color: rgb(62, 62, 62); font-size: 15px; letter-spacing: 0.544px; background-color: rgb(255, 255, 255); font-family: monospace; text-align: left; widows: 1; word-spacing: 2px; caret-color: rgb(255, 0, 0); white-space: pre-wrap;" style="max-width: 100%;font-size: 15px;letter-spacing: 0.544px;widows: 1;caret-color: rgb(255, 0, 0);white-space: pre-wrap;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section mpa-from-tpl="t" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(168, 168, 168)" data-darkmode-original-color-15923650965579="rgb(62, 62, 62)" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><pre data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(167, 167, 167)" data-darkmode-original-color-15923650965579="rgb(63, 63, 63)" data-style="letter-spacing: 0.544px; font-size: 16px; color: rgb(63, 63, 63); word-spacing: 1px; line-height: inherit;" style="max-width: 100%;letter-spacing: 0.544px;font-size: 16px;color: rgb(63, 63, 63);word-spacing: 1px;line-height: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-mpa-template-id="1250" data-mpa-color="#ffffff" data-mpa-category="divider" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(230, 230, 230)" data-darkmode-original-color="rgb(0, 0, 0)" data-style="margin-right: 0.5em; margin-left: 0.5em; white-space: normal; font-family: -apple-system-font, system-ui, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif; color: rgb(0, 0, 0); letter-spacing: 0px; word-spacing: 2px;" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(230, 230, 230)" data-darkmode-original-color-15923650965579="rgb(0, 0, 0)" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><pre data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(167, 167, 167)" data-darkmode-original-color-15923650965579="rgb(63, 63, 63)" data-style="letter-spacing: 0.544px; font-size: 16px; color: rgb(63, 63, 63); word-spacing: 1px; line-height: inherit;" style="max-width: 100%;letter-spacing: 0.544px;line-height: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-mpa-template-id="1250" data-mpa-color="#ffffff" data-mpa-category="divider" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(230, 230, 230)" data-darkmode-original-color="rgb(0, 0, 0)" data-style="margin-right: 0.5em; margin-left: 0.5em; white-space: normal; font-family: -apple-system-font, system-ui, 'Helvetica Neue', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei UI', 'Microsoft YaHei', Arial, sans-serif; color: rgb(0, 0, 0); letter-spacing: 0px; word-spacing: 2px;" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(230, 230, 230)" data-darkmode-original-color-15923650965579="rgb(0, 0, 0)" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(230, 230, 230)" data-darkmode-original-color="rgb(0, 0, 0)" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(230, 230, 230)" data-darkmode-original-color-15923650965579="rgb(0, 0, 0)" style="margin-right: 0em;margin-left: 0em;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-right: 0.5em;margin-left: 0.5em;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><pre data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(168, 168, 168)" data-darkmode-original-color="rgb(62, 62, 62)" data-style="letter-spacing: 0.544px; font-weight: 700; text-align: -webkit-center; background-color: rgb(255, 255, 255); font-size: 16px; color: rgb(62, 62, 62); widows: 1; word-spacing: 2px;" style="max-width: 100%;letter-spacing: 0.544px;text-align: center;text-size-adjust: auto;color: rgb(62, 62, 62);font-weight: 700;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><pre data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(168, 168, 168)" data-darkmode-original-color="rgb(62, 62, 62)" data-style="letter-spacing: 0.544px; font-weight: 700; text-align: -webkit-center; background-color: rgb(255, 255, 255); font-size: 16px; color: rgb(62, 62, 62); widows: 1; word-spacing: 2px;" style="max-width: 100%;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><pre style="max-width: 100%;letter-spacing: 0.544px;text-align: left;box-sizing: border-box !important;overflow-wrap: break-word !important;"><h1 style="max-width: 100%;white-space: pre-wrap;letter-spacing: 0.544px;font-family: 微软雅黑;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section mpa-from-tpl="t" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><pre style="max-width: 100%;letter-spacing: 0.544px;line-height: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-mpa-template="t" mpa-from-tpl="t" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-id="94086" data-color="#276ca3" data-tools="135编辑器" mpa-from-tpl="t" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section mpa-from-tpl="t" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><pre style="max-width: 100%;color: rgb(63, 63, 63);letter-spacing: 0.544px;line-height: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-mpa-template="t" mpa-from-tpl="t" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-id="94086" data-color="#276ca3" data-tools="135编辑器" mpa-from-tpl="t" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section mpa-from-tpl="t" style="max-width: 100%;display: inline-block;box-sizing: border-box !important;overflow-wrap: break-word !important;"><pre style="max-width: 100%;letter-spacing: 0.544px;line-height: inherit;box-sizing: border-box !important;overflow-wrap: break-word !important;"><pre data-darkmode-bgcolor-15882384789136="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882384789136="rgb(255, 255, 255)" data-style="letter-spacing: 0.544px; background-color: rgb(255, 255, 255); text-align: center; color: rgba(230, 230, 230, 0.9); font-size: 16px; line-height: 25.6px; overflow-wrap: break-word !important;" data-darkmode-bgcolor-15882396318564="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882396318564="rgb(255, 255, 255)" data-darkmode-color-15882396318564="rgba(230, 230, 230, 0.9)" data-darkmode-original-color-15882396318564="rgba(230, 230, 230, 0.9)" data-darkmode-bgcolor-15900529136199="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15900529136199="rgb(255, 255, 255)" data-darkmode-color-15900529136199="rgba(230, 230, 230, 0.9)" data-darkmode-original-color-15900529136199="rgba(230, 230, 230, 0.9)" style="max-width: 100%;letter-spacing: 0.544px;text-align: center;color: rgba(230, 230, 230, 0.9);line-height: 25.6px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-darkmode-bgcolor-15860613985508="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15860613985508="rgb(255, 255, 255)" data-darkmode-color-15860613985508="rgb(230, 230, 230)" data-darkmode-original-color-15860613985508="rgb(0, 0, 0)" data-darkmode-bgcolor-15870356070738="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356070738="rgb(255, 255, 255)" data-darkmode-color-15870356070738="rgb(230, 230, 230)" data-darkmode-original-color-15870356070738="rgb(0, 0, 0)" data-darkmode-bgcolor-15870356071023="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356071023="rgb(255, 255, 255)" data-darkmode-color-15870356071023="rgb(230, 230, 230)" data-darkmode-original-color-15870356071023="rgb(0, 0, 0)" data-darkmode-bgcolor-15882384789136="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882384789136="rgb(255, 255, 255)" data-darkmode-color-15882384789136="rgb(230, 230, 230)" data-darkmode-original-color-15882384789136="rgb(0, 0, 0)" data-darkmode-bgcolor-15882396318564="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882396318564="rgb(255, 255, 255)" data-darkmode-color-15882396318564="rgb(230, 230, 230)" data-darkmode-original-color-15882396318564="rgb(0, 0, 0)" data-darkmode-bgcolor-15900529136199="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15900529136199="rgb(255, 255, 255)" data-darkmode-color-15900529136199="rgb(230, 230, 230)" data-darkmode-original-color-15900529136199="rgb(0, 0, 0)" style="max-width: 100%;display: inline-block;clear: both;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-tools="135编辑器" data-id="91842" data-darkmode-bgcolor-15860613985508="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15860613985508="rgb(255, 255, 255)" data-darkmode-color-15860613985508="rgb(230, 230, 230)" data-darkmode-original-color-15860613985508="rgb(0, 0, 0)" data-darkmode-bgcolor-15870356070738="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356070738="rgb(255, 255, 255)" data-darkmode-color-15870356070738="rgb(230, 230, 230)" data-darkmode-original-color-15870356070738="rgb(0, 0, 0)" data-darkmode-bgcolor-15870356071023="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356071023="rgb(255, 255, 255)" data-darkmode-color-15870356071023="rgb(230, 230, 230)" data-darkmode-original-color-15870356071023="rgb(0, 0, 0)" data-darkmode-bgcolor-15882384789136="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882384789136="rgb(255, 255, 255)" data-darkmode-color-15882384789136="rgb(230, 230, 230)" data-darkmode-original-color-15882384789136="rgb(0, 0, 0)" data-darkmode-bgcolor-15882396318564="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882396318564="rgb(255, 255, 255)" data-darkmode-color-15882396318564="rgb(230, 230, 230)" data-darkmode-original-color-15882396318564="rgb(0, 0, 0)" data-darkmode-bgcolor-15900529136199="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15900529136199="rgb(255, 255, 255)" data-darkmode-color-15900529136199="rgb(230, 230, 230)" data-darkmode-original-color-15900529136199="rgb(0, 0, 0)" style="max-width: 100%;letter-spacing: 0.544px;border-width: 0px;border-style: none;border-color: initial;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-darkmode-bgcolor-15860613985508="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15860613985508="rgb(255, 255, 255)" data-darkmode-color-15860613985508="rgb(230, 230, 230)" data-darkmode-original-color-15860613985508="rgb(0, 0, 0)" data-darkmode-bgcolor-15870356070738="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356070738="rgb(255, 255, 255)" data-darkmode-color-15870356070738="rgb(230, 230, 230)" data-darkmode-original-color-15870356070738="rgb(0, 0, 0)" data-darkmode-bgcolor-15870356071023="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356071023="rgb(255, 255, 255)" data-darkmode-color-15870356071023="rgb(230, 230, 230)" data-darkmode-original-color-15870356071023="rgb(0, 0, 0)" data-darkmode-bgcolor-15882384789136="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882384789136="rgb(255, 255, 255)" data-darkmode-color-15882384789136="rgb(230, 230, 230)" data-darkmode-original-color-15882384789136="rgb(0, 0, 0)" data-darkmode-bgcolor-15882396318564="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882396318564="rgb(255, 255, 255)" data-darkmode-color-15882396318564="rgb(230, 230, 230)" data-darkmode-original-color-15882396318564="rgb(0, 0, 0)" data-darkmode-bgcolor-15900529136199="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15900529136199="rgb(255, 255, 255)" data-darkmode-color-15900529136199="rgb(230, 230, 230)" data-darkmode-original-color-15900529136199="rgb(0, 0, 0)" style="max-width: 100%;display: inline-block;clear: both;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-brushtype="text" data-darkmode-bgcolor-15860613985508="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15860613985508="rgb(255, 255, 255)" data-darkmode-color-15860613985508="rgb(230, 230, 230)" data-darkmode-original-color-15860613985508="rgb(0, 0, 0)" data-darkmode-bgimage-15860613985508="1" data-style="padding: 18px 15px 20px 10px; color: rgb(86, 146, 214); text-align: center; letter-spacing: 1.5px; background-image: url('https://www.zkxjob.com/wp-content/uploads/2022/06/wxsync-2022-06-a2a8a5e1e58f30392066a170034ee027.png'); background-size: 100% 100%; background-repeat: no-repeat; overflow-wrap: break-word !important;" data-darkmode-bgcolor-15870356070738="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356070738="rgb(255, 255, 255)" data-darkmode-color-15870356070738="rgb(230, 230, 230)" data-darkmode-original-color-15870356070738="rgb(0, 0, 0)" data-darkmode-bgimage-15870356070738="1" data-darkmode-bgcolor-15870356071023="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356071023="rgb(255, 255, 255)" data-darkmode-color-15870356071023="rgb(230, 230, 230)" data-darkmode-original-color-15870356071023="rgb(0, 0, 0)" data-darkmode-bgimage-15870356071023="1" data-darkmode-bgcolor-15882384789136="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882384789136="rgb(255, 255, 255)" data-darkmode-color-15882384789136="rgb(230, 230, 230)" data-darkmode-original-color-15882384789136="rgb(0, 0, 0)" data-darkmode-bgimage-15882384789136="1" data-darkmode-bgcolor-15882396318564="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882396318564="rgb(255, 255, 255)" data-darkmode-color-15882396318564="rgb(230, 230, 230)" data-darkmode-original-color-15882396318564="rgb(0, 0, 0)" data-darkmode-bgimage-15882396318564="1" data-darkmode-bgcolor-15900529136199="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15900529136199="rgb(255, 255, 255)" data-darkmode-color-15900529136199="rgb(230, 230, 230)" data-darkmode-original-color-15900529136199="rgb(0, 0, 0)" data-darkmode-bgimage-15900529136199="1" style="padding: 18px 15px 20px 10px;max-width: 100%;background-size: 100% 100%;background-image: url('https://www.zkxjob.com/wp-content/uploads/2022/06/wxsync-2022-06-a2a8a5e1e58f30392066a170034ee027.png');color: rgb(86, 146, 214);letter-spacing: 1.5px;background-repeat: no-repeat;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-darkmode-bgcolor-15860613985508="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15860613985508="rgb(255, 255, 255)" data-darkmode-color-15860613985508="rgb(230, 230, 230)" data-darkmode-original-color-15860613985508="rgb(0, 0, 0)" data-darkmode-bgimage-15860613985508="1" data-darkmode-bgcolor-15870356070738="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356070738="rgb(255, 255, 255)" data-darkmode-color-15870356070738="rgb(230, 230, 230)" data-darkmode-original-color-15870356070738="rgb(0, 0, 0)" data-darkmode-bgimage-15870356070738="1" data-darkmode-bgcolor-15870356071023="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356071023="rgb(255, 255, 255)" data-darkmode-color-15870356071023="rgb(230, 230, 230)" data-darkmode-original-color-15870356071023="rgb(0, 0, 0)" data-darkmode-bgimage-15870356071023="1" data-darkmode-bgcolor-15882384789136="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882384789136="rgb(255, 255, 255)" data-darkmode-color-15882384789136="rgb(230, 230, 230)" data-darkmode-original-color-15882384789136="rgb(0, 0, 0)" data-darkmode-bgimage-15882384789136="1" data-darkmode-bgcolor-15882396318564="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882396318564="rgb(255, 255, 255)" data-darkmode-color-15882396318564="rgb(230, 230, 230)" data-darkmode-original-color-15882396318564="rgb(0, 0, 0)" data-darkmode-bgimage-15882396318564="1" data-darkmode-bgcolor-15900529136199="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15900529136199="rgb(255, 255, 255)" data-darkmode-color-15900529136199="rgb(230, 230, 230)" data-darkmode-original-color-15900529136199="rgb(0, 0, 0)" data-darkmode-bgimage-15900529136199="1" style="max-width: 100%;display: flex;justify-content: center;align-items: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-darkmode-bgcolor-15860613985508="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15860613985508="rgb(255, 255, 255)" data-darkmode-color-15860613985508="rgb(230, 230, 230)" data-darkmode-original-color-15860613985508="rgb(0, 0, 0)" data-darkmode-bgimage-15860613985508="1" data-darkmode-bgcolor-15870356070738="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356070738="rgb(255, 255, 255)" data-darkmode-color-15870356070738="rgb(230, 230, 230)" data-darkmode-original-color-15870356070738="rgb(0, 0, 0)" data-darkmode-bgimage-15870356070738="1" data-darkmode-bgcolor-15870356071023="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356071023="rgb(255, 255, 255)" data-darkmode-color-15870356071023="rgb(230, 230, 230)" data-darkmode-original-color-15870356071023="rgb(0, 0, 0)" data-darkmode-bgimage-15870356071023="1" data-darkmode-bgcolor-15882384789136="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882384789136="rgb(255, 255, 255)" data-darkmode-color-15882384789136="rgb(230, 230, 230)" data-darkmode-original-color-15882384789136="rgb(0, 0, 0)" data-darkmode-bgimage-15882384789136="1" data-darkmode-bgcolor-15882396318564="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882396318564="rgb(255, 255, 255)" data-darkmode-color-15882396318564="rgb(230, 230, 230)" data-darkmode-original-color-15882396318564="rgb(0, 0, 0)" data-darkmode-bgimage-15882396318564="1" data-darkmode-bgcolor-15900529136199="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15900529136199="rgb(255, 255, 255)" data-darkmode-color-15900529136199="rgb(230, 230, 230)" data-darkmode-original-color-15900529136199="rgb(0, 0, 0)" data-darkmode-bgimage-15900529136199="1" style="margin-left: 2px;max-width: 100%;width: 20px;box-sizing: border-box !important;overflow-wrap: break-word !important;"></section><section data-brushtype="text" data-darkmode-bgcolor-15860613985508="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15860613985508="rgb(255, 255, 255)" data-darkmode-color-15860613985508="rgb(51, 51, 51)" data-darkmode-original-color-15860613985508="rgb(51, 51, 51)" data-darkmode-bgimage-15860613985508="1" data-darkmode-bgcolor-15870356070738="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356070738="rgb(255, 255, 255)" data-darkmode-color-15870356070738="rgb(51, 51, 51)" data-darkmode-original-color-15870356070738="rgb(51, 51, 51)" data-darkmode-bgimage-15870356070738="1" data-darkmode-bgcolor-15870356071023="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15870356071023="rgb(255, 255, 255)" data-darkmode-color-15870356071023="rgb(51, 51, 51)" data-darkmode-original-color-15870356071023="rgb(51, 51, 51)" data-darkmode-bgimage-15870356071023="1" data-darkmode-bgcolor-15882384789136="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882384789136="rgb(255, 255, 255)" data-darkmode-color-15882384789136="rgb(51, 51, 51)" data-darkmode-original-color-15882384789136="rgb(51, 51, 51)" data-darkmode-bgimage-15882384789136="1" data-darkmode-bgcolor-15882396318564="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15882396318564="rgb(255, 255, 255)" data-darkmode-color-15882396318564="rgb(51, 51, 51)" data-darkmode-original-color-15882396318564="rgb(51, 51, 51)" data-darkmode-bgimage-15882396318564="1" data-darkmode-bgcolor-15900529136199="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15900529136199="rgb(255, 255, 255)" data-darkmode-color-15900529136199="rgb(51, 51, 51)" data-darkmode-original-color-15900529136199="rgb(51, 51, 51)" data-darkmode-bgimage-15900529136199="1" style="max-width: 100%;font-size: 14px;color: rgb(51, 51, 51);text-align: left;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-family: 楷体, 楷体_GB2312, SimKai;font-size: 15px;box-sizing: border-box !important;overflow-wrap: break-word !important;">点这里,获取新手福利</span><span style="color: rgb(53, 53, 53);font-family: "PingFang SC", "Microsoft YaHei", sans-serif;font-size: 15px;letter-spacing: 0.8px;text-align: center;word-spacing: 0.8px;background-color: rgb(255, 255, 255);"></span></section></section></section></section></section></section></section>

本篇文章来源于: 菜鸟学Python

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

你可能也喜欢

热评文章

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享