本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
以下文章來源于DataCharm,作者 寧海濤
轉載地址
https://www.zhihu.com/people/qi-shi-huan-hao-la-14/posts
引言
在繪制學術圖表之余,我們也會進行商業圖表的繪制,畢竟學術圖表的配色有點單調和嚴謹啊,今天這篇推文就使用小清新配色對散點圖和折線圖進行另類的繪制,繪制出讓人耳目一新的可視化作品,
02. 資料可視化
本期推文的可視化繪制技巧相對簡單,對其進行合理組合和顏色優化,就能呈現出不一樣的效果,因為構造資料比較簡單,這里直接給出整個的繪制代碼:
import pandas as pd import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1.inset_locator import inset_axes x = np.arange(0,len(artist_01),1) y = artist_01['data01'].values x_label = artist_01['year'].values plt.style.use('fivethirtyeight') fig,ax = plt.subplots(figsize=(8,4),dpi=200,facecolor='white',edgecolor='white') ax.set_facecolor('white') line = ax.plot(x,y,color='#333333',lw=1.,zorder=2) #繪制不同散點圖 scatter_out = ax.scatter(x,y,s=500,zorder=1,color='white',ec='grey',alpha=.7,lw=.5) for i in artist_01.index.to_list(): scatter = ax.scatter(x[i],y[i],s=180,zorder=2,ec='k',lw=.4,color=year_color[i]) scatter_in = ax.scatter(x,y,s=30,zorder=3,color="#333333") #定制化繪制 ax.grid(color='gray',lw=.5,alpha=.5) ax.tick_params(left=False,bottom=False,labelbottom=False,labelsize=10,colors='gray') ax.set_ylim(bottom=0,top=43) ax.set_yticks(np.arange(0, 45, step=5)) ax.set_xticks(np.arange(-.5, 8, step=.5)) #添加橫線 ax.axhline(y=0,color='#45627C',lw=8) #添加數字標簽 label_text = {"size":13,"color":"k",'weight':'semibold'} for a,b in zip(x,y): ax.text(a, b+2.5, '%.0f' % b, ha='center', va= 'bottom',fontdict=label_text,color=year_color[a]) #添加小散點圖:重點掌握 axins = inset_axes(ax, width=.4, height=.4,loc='upper left', bbox_to_anchor=(0.01, 0.22, 1, 1), bbox_transform=ax.transAxes, borderpad=0) axins.set_ylim(bottom=8,top=35) axins.set_xlim(left=-.5,right=2.5) axins.plot(x[:3],y[:3],color='#333333',lw=1.,zorder=1) axins.axis('off') for spine in ['top','bottom','left','right']: ax.spines[spine].set_color("#FFFFFF") for i in artist_01.index.to_list()[:3]: axins.scatter(x[i],y[i],s=80,color=year_color[i],zorder=2) #繪制小橫線:原理同上 line = inset_axes(ax,width=5.3, height=.4,loc='upper left', bbox_to_anchor=(-0.015, 0.15, 1, 1), bbox_transform=ax.transAxes, borderpad=0) line.plot([.1,.7],[.1,.1],color='#45627C',lw=2) line.axis('off') #添加陰影效果 for i in artist_01.index.to_list(): ax.axvspan(i-.35, i+.35, facecolor='gray',alpha=.1,zorder=0) #添加x軸標簽 label_font = {"size":16,'weight':'bold'} for i,x,text in zip(artist_01.index.to_list(),x,x_label): ax.text(x, -5,text ,ha='center', va= 'bottom',fontdict=label_font,color=year_color[i]) ax.text(.39,1.2,'\nLOREM IPSUM DOLOR SIT AMET',transform = ax.transAxes, ha='center', va='center',fontsize = 20,color='#45627C') ax.text(.02,1.05,'\nIt is a line chart with a title and some series labels,\nTime line chart: This chart shows the changes in number of queries,', transform = ax.transAxes, ha='left', va='center',fontsize = 8,color='#45627C') ax.text(.91,.05,'\nVisualization by DataCharm',transform = ax.transAxes, ha='center', va='center',fontsize = 6,color='black') plt.savefig(r'F:\DataCharm\商業藝術圖表仿制\artist_01_1.png',width=6,height=3, dpi=900,bbox_inches='tight',facecolor='white') #ax.set_axisbelow(True) plt.show()
本人認為比較重要和需要掌握的有以下幾點:
(1)顏色字典的使用
我之前的推文也說過了很多次,合理的運用字典,可以使你事半功倍,這里的代碼如下:
color = ("#51C1C8", "#E96279", "#44A2D6", "#536D84", "#51C1C8", "#E96279", "#44A2D6", "#536D84") year = artist_01.index.to_list() year_color = dict(zip(year,color)) year_color
后面的顏色設定也是依賴于此,
(2)from mpl_toolkits.axes_grid1.inset_locator import inset_axes
該方法可以實作負責圖表的靈活搭配,本推文題目中的小散點圖和題目下的橫線由于超出刻度范圍而采用此方法,代碼如下:
#添加小散點圖:重點掌握 axins = inset_axes(ax, width=.4, height=.4,loc='upper left', bbox_to_anchor=(0.01, 0.22, 1, 1), bbox_transform=ax.transAxes, borderpad=0) axins.set_ylim(bottom=8,top=35) axins.set_xlim(left=-.5,right=2.5) axins.plot(x[:3],y[:3],color='#333333',lw=1.,zorder=1) axins.axis('off') for spine in ['top','bottom','left','right']: ax.spines[spine].set_color("#FFFFFF") for i in artist_01.index.to_list()[:3]: axins.scatter(x[i],y[i],s=80,color=year_color[i],zorder=2) #繪制小橫線:原理同上 line = inset_axes(ax,width=5.3, height=.4,loc='upper left', bbox_to_anchor=(-0.015, 0.15, 1, 1), bbox_transform=ax.transAxes, borderpad=0) line.plot([.1,.7],[.1,.1],color='#45627C',lw=2) line.axis('off')
(3)文本text()的靈活應用
有時候標題和部分刻度lebel也是使用文本進行繪制,其定制化更高,本期就是使用文本對x軸刻度label進行繪制,顏色設定則使用之前的顏色字典,如下:
#添加x軸標簽 label_font = {"size":16,'weight':'bold'} for i,x,text in zip(artist_01.index.to_list(),x,x_label): ax.text(x, -5,text ,ha='center', va= 'bottom',fontdict=label_font,color=year_color[i])
最侄訓制的效果如下:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/159835.html
標籤:Python
