夢(mèng)dedecms列表頁(yè)在文章列表上可能會(huì)有很多的樣式設(shè)置,但是如果是一個(gè)個(gè)性的網(wǎng)站,這里給大家介紹一個(gè)新的方法,就是隔行換色和分組加線。
打開(kāi):inc_channel_unit_functions.php
加入下面一段
//zouql
//$f 列表總數(shù)
//$t 每組列表數(shù)
function MyList($f,$t,$meid,$con)
{
if($meid%$t ==0 && $meid < $f)
return $con;
}
例子:
<ul>
{dede:arclist row=20 titlelen=80 orderby=pubdate}
<li [field:global name=autoindex function='MyList("20","2",@me,"class=\"color\"")'/]>[field:textlink/]</li>
[field:global name=autoindex function='MyList("20","5",@me,"<li class=\"line\"></li>")'/]
{/dede:arclist}
</ul>
上面例子中包含了2個(gè)用法:[field:global name=autoindex function='MyList("20","2",@me,"class=\"color\"")'/]和[field:global name=autoindex function='MyList("20","5",@me,"<li class=\"line\"></li>")'/]第一個(gè),如果你定義了相關(guān)css,就是隔行變色第二個(gè),如果你定義了相關(guān)css,就是隔5行加一橫線,20個(gè)列表加3個(gè)線不是4個(gè)
三生繩一般都是情侶佩戴,寓意有三生三世,永結(jié)同心之說(shuō)。編法不復(fù)雜,佩戴效果簡(jiǎn)約大方。
那今天我們來(lái)學(xué)習(xí)三生繩的編法。
三生繩情侶佩戴的多用紅色,本命年的也同樣適用紅色,當(dāng)然有些男孩子不喜歡紅色的也可以換成其他顏色來(lái)編,它所賦予的寓意都是一樣的。
用紅色的來(lái)做個(gè)步驟圖。
需要的是玉線,6根,長(zhǎng)度約80厘米。用72號(hào)線或者12號(hào)股線也是一樣的,步驟也是一樣的。
選取其中三條線,對(duì)折,扭線,也就是做成兩股辮,長(zhǎng)度約2.5厘米,對(duì)折,整理下,打蛇結(jié)。扣眼做成。
因?yàn)槭且龡l,所以我們把六條線分為三份,捋順,取旁邊的兩根。
加上一條對(duì)折的玉線,其余四根線暫時(shí)往上放,或者用夾子固定住。
開(kāi)始編四股辮。
蛇結(jié)固定,這里說(shuō)明下,這個(gè)蛇結(jié)稍后要拆開(kāi)的,所以寬送一點(diǎn),確保四股辮的結(jié)尾不會(huì)散開(kāi)即可。
把已經(jīng)編好的四股辮放上去,換第二組的兩根線下來(lái),同樣也要編四股辮。
先加上對(duì)折的一條線,共四條線。
開(kāi)始編四股辮。
第二根結(jié)束。
那么你們應(yīng)該也猜到了,第三組同樣也是如上的步驟。
先加線。
編四股辮。三組全部編完了。
毫無(wú)懸念,編繩其實(shí)只要有編繩基礎(chǔ),加上一懂步驟,那么就很輕松的上手了,沒(méi)什么訣竅,關(guān)鍵在于練習(xí)。
三個(gè)蛇結(jié)都是比較寬松的,三組四股辮對(duì)齊以后就要拆除了。
對(duì)齊后取十二條線中較長(zhǎng)的一根,繞住全部的線,最后一圈的時(shí)候就圈把線穿過(guò),拉緊,剪去多余的,留下約兩厘米的線頭,火燒固定。
?
剪去其中位置靠中間的七根線,燒頭,余下的四根線打蛇結(jié),把燒頭的位置藏住。
再剪去中間的兩根線,燒頭,余下的兩根線打蛇結(jié),把這個(gè)的痕跡包住。
余下的兩根線合并一起,燒細(xì)拉長(zhǎng),穿過(guò)一個(gè)平安扣。
這里插一個(gè)訣竅,平安扣如果打結(jié)的話,燒頭之后結(jié)會(huì)鼓出來(lái),不是很美觀,那么我們就不打結(jié),只需要留出一段大學(xué)三厘米的線。
直接把線頭燒融化,往平安扣面輕輕按一下,就可以形成一個(gè)固定住平安扣的點(diǎn)了。這個(gè)除非線留短了,否則都會(huì)卡得很結(jié)實(shí),不會(huì)脫落的。
平安扣穿過(guò)扣眼。整個(gè)編法的步驟就完成了。
如果看不明白有任何問(wèn)題的歡迎留言,看到會(huì)回復(fù)噠。
歡迎點(diǎn)贊給我加油,會(huì)努力更新,謝謝。
一張可視化圖上除了主要的點(diǎn)、線、面之外,文本標(biāo)簽、坐標(biāo)軸標(biāo)簽等也是很重要的可視媒介,特別是對(duì)于信息圖表而言。 下面這張圖基本囊括了用到的圖形元素。
figure上的圖元
加文本可以通過(guò) ax.text(x,y, "Text") 。添加標(biāo)題通常寫(xiě)ax.set_title(),另外也可以用ax.title.set_text('title')或ax.set(title='ttl')設(shè)置標(biāo)題, 整理如下:
常用圖表標(biāo)簽添加的接口
圖形元素設(shè)置除了文本類型之外,也可以往里加形狀 。
給散點(diǎn)圖加標(biāo)簽并加分隔線繪制矩陣圖以實(shí)踐一下以上方法:
import matplotlib.lines as lines
fig, ax= plt.subplots()
ax.plot(df['z'],df['y'],'o')
ax.add_artist(lines.Line2D([70,70], [30,100],color='#000000',lw=3)) #是[x1,x2],[y1,y2] 不是[x1,y1],[x2,y2]
ax.add_artist(lines.Line2D([30,100], [65,65],color='#000000',lw=3))
ax.set_xlim(30,100)
ax.set_ylim(30,100)
ax.set_xlabel("z")
ax.set_ylabel("y")
矩陣圖繪制示例
繪制瀑布圖綜合運(yùn)用ax.bar()的參數(shù)和文本標(biāo)簽,并封裝為一個(gè)函數(shù),以后使用只需要調(diào)用就好:
Matplotlib繪制瀑布圖示例
#瀑布圖
x=[17,-3,7,6] #原始數(shù)據(jù)
def waterfall_chart(x):
j=0 #sum(x) 最終柱的結(jié)果
k=0 #k=x[i-1]
x0=[]
for i in x:
if i<0:
x0.append(j+i)
else:
x0.append(j)
j+=i
x1=[abs(i) for i in x]
c1=['#1EAFAE' if i>0 else '#69FFFF' for i in x]
c1.append('#BA5C25')
x0[0]=0
x0.append(0)
x1.append(j)
x.append(j)
w=list(range(1,len(x)+1))
fig,ax= plt.subplots(figsize=(6,5))
ax.bar(w,x0,alpha=0) #都透明度為0了,顏色不重要
rects=ax.bar(w,x1,bottom=x0,color=c1) #顏色可傳一個(gè)數(shù)組的
ax.set_ylim(0, 30)
i=0
for rect in rects: #加上適當(dāng)?shù)奈谋緲?biāo)簽
height = rect.get_height()+x0[i]
ax.annotate('{}'.format(x[i]),
xy=(rect.get_x() + rect.get_width() / 2, height),
xytext=(0,1), # 1 points vertical offset
textcoords="offset points",
ha='center', va='bottom')
i+=1
ax.set_xticklabels(['','Q1','Q2','Q3','Q4','Ys'])
return ax
waterfall_chart(x)
為了更好地展現(xiàn)數(shù)據(jù)間的聯(lián)系或變化,我們有時(shí)會(huì)需要將多種圖表類型用在同一張可視化圖里,一種是共用坐標(biāo)軸的組合圖,例如面積圖+柱狀圖的組合、散點(diǎn)+折線圖就是很基礎(chǔ)的組合圖。另一種是雙坐標(biāo)軸,很常見(jiàn)的圖是左邊的y軸是月活,畫(huà)柱狀圖,右邊的y軸是增長(zhǎng)率,畫(huà)折線圖。
棒棒糖圖(Lollipop)是將條形圖的柱變得很細(xì)并突出末端的一類圖,形似棒棒糖,特別適合于展示分類標(biāo)簽很多的數(shù)據(jù)。可以通過(guò)將柱狀圖和散點(diǎn)圖結(jié)合的方法繪制,Matplotlib庫(kù)繪制起來(lái)并不復(fù)雜,代碼如下。但對(duì)于一些散點(diǎn)圖的y軸不支持分類標(biāo)簽的庫(kù)來(lái)說(shuō),要畫(huà)棒棒糖圖還是挺復(fù)雜的。
y = [5, 4, 11, 10, 15, 11, 13, 8,13,15,13,19]
x=['c'+str(i) for i in range(len(y))]
fig, ax= plt.subplots(figsize=(6,6))
ax.barh(x,y,height=0.08,zorder=1) #圖層順序的解決方案
ax.scatter(y,x,zorder=2,color='#ba5c25')
有時(shí)為了對(duì)比兩類數(shù)據(jù),除了用簇狀柱形圖或簇狀條形圖外,也可以試試啞鈴圖,理解了上面畫(huà)棒棒糖圖的方法之后,要組合出啞鈴圖并不難,對(duì)數(shù)據(jù)進(jìn)行一定運(yùn)算后用barh加兩個(gè)scatter就可以畫(huà)出來(lái)。
帕累托圖是雙坐標(biāo)軸的可視化典例。帕累托圖特別適合展示符合長(zhǎng)尾效應(yīng)的數(shù)據(jù)。matplotlib給我們提供了ax.twinx()用于生成共用x軸的另一個(gè)Axes,效果就是左邊的y軸比例尺和右邊比例尺不一定一樣,能更好地將兩類圖進(jìn)行效果組合。
y=[23,162,51,119,12,3,8] #模擬數(shù)據(jù)
x=[str(i) for i in range(2,len(y)+2)]
y=sorted(y,reverse=True)
ysum=sum(y)
y2=[]
cc=0
for i in y:
cc+=i
y2.append(cc/ysum*100)
fig = plt.figure()
ax1 = fig.add_subplot(111)
rects=ax1.bar(x,y,color='#1EAFAE')
ax1.set_ylabel('Month IC')
ax1.set_ylim(0, 180)
ax2 = ax1.twinx()
#https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.twinx.html#matplotlib.axes.Axes.twinx
ax2.set_ylim(0, 100)
?
ax2.plot(x, y2,'o',color='#FFA069',linewidth=2,ls='-')
?
ax2.set_ylabel('%')
?
for rect in rects:
height = rect.get_height()
ax1.annotate('{}'.format(height),
xy=(rect.get_x() + rect.get_width() / 2, height),
xytext=(0,1), # 1 points vertical offset
textcoords="offset points",
ha='center', va='bottom')
ax1.set_title("Pareto in Matplotlib") #
Matplotlib繪制帕累托圖
除了組合圖外,有時(shí)候我們也需要將多個(gè)圖并排以展現(xiàn)某種數(shù)據(jù)關(guān)系。前面說(shuō)過(guò)一個(gè)畫(huà)布下可以有多套Axes,正常情況下我們只需要一套Axes用來(lái)畫(huà)圖,但是也經(jīng)常需要在一個(gè)畫(huà)布中畫(huà)多張圖,形成分面或子母圖的效果,前面我們基本都是寫(xiě)fig, ax= plt.subplots(),實(shí)際上subplots()可以設(shè)置nrows、ncols參數(shù)生成多套Axes。
plt.subplots()的常用寫(xiě)法有:
生成多個(gè)繪圖區(qū)域
圖中代碼在全局繪圖區(qū)域中建立n行、m列的分區(qū)繪圖區(qū)域,并定位到其中一個(gè)子圖區(qū)域。之后ax的用法和前面一致,不贅述。
生成的圖片在shell環(huán)境中彈出的界面有保存圖片的按鍵,在jupyter環(huán)境中可以點(diǎn)擊圖片然后右鍵保存。而如果要通過(guò)代碼保存圖片到本地,一般通過(guò)plt.savefig(fname,dpi=300)保存圖片,參數(shù)有文件保存路徑(fname)、圖片每英寸像素(dpi)、邊緣顏色(edgecolor)等。在shell環(huán)境中一般通過(guò)plt.show()展示圖片,而jupyter notebook中通常寫(xiě)%matplotlib inline將圖片直接在Out[]里輸出展示。
Matplotlib的rcParams接口可以設(shè)置很多個(gè)性化內(nèi)容,包括剛提到的savefig的edgecolor默認(rèn)值,可以寫(xiě)mpl.rcParams["savefig.edgecolor"]='blue'改變?cè)瓉?lái)的默認(rèn)值white。直方圖的默認(rèn)分箱數(shù)可以通過(guò)rcParams["hist.bins"]=5改變。
而為了在Matplotlib中支持中文,各教程的解決方案基本都有mpl.rcParams['font.family']='SimHei'這句,就是將Matplotlib的字體替換為微軟雅黑。前面基礎(chǔ)圖表繪制部分通過(guò)更新mpl.rcParams["axes.prop_cycle"]改變了繪圖的主題色,Matplotlib本身是提供了備選的繪圖渲染的各種主題,可以通過(guò)style.use('ggplot')調(diào)用ggplot主題(想換回默認(rèn)主題用style.use('default'))。就像給輸入法換皮膚一樣,rcParams接口給了我們更多的自由度和個(gè)性化。
三維可視化和科學(xué)可視化是Matplotlib特別擅長(zhǎng)的領(lǐng)域,人類作為三維生物,對(duì)三維的圖像有一定的偏好,扁平化和三維各有優(yōu)勢(shì),各有不同的應(yīng)用場(chǎng)合,能畫(huà)好二維可視化圖也該會(huì)畫(huà)三維的圖表,且一些場(chǎng)景用好三維有奇效。Matplotlib的三維可視化封裝在mpl_toolkits工具套件的mplot3d里,mplot3d下的API主要包括Axes3D(三維坐標(biāo)軸區(qū)域)、art3d.xx3D(三維圖元)和proj3d(三維坐標(biāo)變換)。
from mpl_toolkits.mplot3d import Axes3D # noqa: F401 unused import
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.bar(df['x'],df['y'], zs=0, zdir='y', alpha=0.8)
ax.bar(df['x'],df['z'], zs=1, zdir='y', alpha=0.8)
ax.bar(df['x'],df['y'], zs=2, zdir='y', alpha=0.8)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_yticks([0,1,2])
三維可視化和科學(xué)可視化聯(lián)系很緊密,科研作圖中應(yīng)用廣泛,各種漂亮的參數(shù)曲面在官網(wǎng)示例里有很多,這里略過(guò)、當(dāng)然二維下也能畫(huà)出很優(yōu)美的函數(shù)圖像,結(jié)合numpy生成[0,2]之間的正弦函數(shù)曲線只需要4行代碼:
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2 * np.pi * t)
fig, ax = plt.subplots()
ax.plot(t, s)
繪制指數(shù)函數(shù)、分形的雪花曲線也是類似的過(guò)程,在官網(wǎng)案例集有類似的例子,具體這里不展開(kāi)。
matplotlib可視化思維導(dǎo)圖
總結(jié)下本文從Matplotlib的可視化基礎(chǔ)框架一步步畫(huà)散點(diǎn)、折線、柱狀、箱線等圖,通過(guò)理解參數(shù)拓展畫(huà)了瀑布圖、矩陣圖、棒棒糖圖等,并且微調(diào)坐標(biāo)軸文本、標(biāo)題等圖形元素,讓可視化更完備,通過(guò)雙y軸繪制帕累托圖等組合圖,也繪制了包含多張子圖的圖和三維圖。
通過(guò)以上實(shí)踐可以看到的Matplotlib可視化語(yǔ)法的特點(diǎn)是繪圖對(duì)象和標(biāo)簽標(biāo)題等元素有一定獨(dú)立性,且有不同層級(jí)的接口可以用來(lái)微調(diào)元素,例如設(shè)置標(biāo)題就有多種寫(xiě)法 ,Matplotlib不同于ggplot2的管道寫(xiě)法、也不同于Altair等庫(kù)將數(shù)據(jù)傳到chart對(duì)象再調(diào)用mark_bar()等確定繪制什么圖。可視化是要好看,也不能忘了所展現(xiàn)的數(shù)據(jù)與數(shù)據(jù)間的關(guān)系是重點(diǎn)。
最后用極坐標(biāo)繪心形線結(jié)束本文。
文中代碼更新于https://github.com/QLWeilcf/VisualizedLyn/blob/master/viz-matplotlib-in-action-lyns.ipynb。代碼可以直接下載運(yùn)行。有任何建議歡迎留言交流。
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。