Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
夢dedecms列表頁在文章列表上可能會有很多的樣式設置,但是如果是一個個性的網站,這里給大家介紹一個新的方法,就是隔行換色和分組加線。
打開:inc_channel_unit_functions.php
加入下面一段
//zouql
//$f 列表總數
//$t 每組列表數
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個用法:[field:global name=autoindex function='MyList("20","2",@me,"class=\"color\"")'/]和[field:global name=autoindex function='MyList("20","5",@me,"<li class=\"line\"></li>")'/]第一個,如果你定義了相關css,就是隔行變色第二個,如果你定義了相關css,就是隔5行加一橫線,20個列表加3個線不是4個
三生繩一般都是情侶佩戴,寓意有三生三世,永結同心之說。編法不復雜,佩戴效果簡約大方。
那今天我們來學習三生繩的編法。
三生繩情侶佩戴的多用紅色,本命年的也同樣適用紅色,當然有些男孩子不喜歡紅色的也可以換成其他顏色來編,它所賦予的寓意都是一樣的。
用紅色的來做個步驟圖。
需要的是玉線,6根,長度約80厘米。用72號線或者12號股線也是一樣的,步驟也是一樣的。
選取其中三條線,對折,扭線,也就是做成兩股辮,長度約2.5厘米,對折,整理下,打蛇結。扣眼做成。
因為是要三條,所以我們把六條線分為三份,捋順,取旁邊的兩根。
加上一條對折的玉線,其余四根線暫時往上放,或者用夾子固定住。
開始編四股辮。
蛇結固定,這里說明下,這個蛇結稍后要拆開的,所以寬送一點,確保四股辮的結尾不會散開即可。
把已經編好的四股辮放上去,換第二組的兩根線下來,同樣也要編四股辮。
先加上對折的一條線,共四條線。
開始編四股辮。
第二根結束。
那么你們應該也猜到了,第三組同樣也是如上的步驟。
先加線。
編四股辮。三組全部編完了。
毫無懸念,編繩其實只要有編繩基礎,加上一懂步驟,那么就很輕松的上手了,沒什么訣竅,關鍵在于練習。
三個蛇結都是比較寬松的,三組四股辮對齊以后就要拆除了。
對齊后取十二條線中較長的一根,繞住全部的線,最后一圈的時候就圈把線穿過,拉緊,剪去多余的,留下約兩厘米的線頭,火燒固定。
?
剪去其中位置靠中間的七根線,燒頭,余下的四根線打蛇結,把燒頭的位置藏住。
再剪去中間的兩根線,燒頭,余下的兩根線打蛇結,把這個的痕跡包住。
余下的兩根線合并一起,燒細拉長,穿過一個平安扣。
這里插一個訣竅,平安扣如果打結的話,燒頭之后結會鼓出來,不是很美觀,那么我們就不打結,只需要留出一段大學三厘米的線。
直接把線頭燒融化,往平安扣面輕輕按一下,就可以形成一個固定住平安扣的點了。這個除非線留短了,否則都會卡得很結實,不會脫落的。
平安扣穿過扣眼。整個編法的步驟就完成了。
如果看不明白有任何問題的歡迎留言,看到會回復噠。
歡迎點贊給我加油,會努力更新,謝謝。
一張可視化圖上除了主要的點、線、面之外,文本標簽、坐標軸標簽等也是很重要的可視媒介,特別是對于信息圖表而言。 下面這張圖基本囊括了用到的圖形元素。
figure上的圖元
加文本可以通過 ax.text(x,y, "Text") 。添加標題通常寫ax.set_title(),另外也可以用ax.title.set_text('title')或ax.set(title='ttl')設置標題, 整理如下:
常用圖表標簽添加的接口
圖形元素設置除了文本類型之外,也可以往里加形狀 。
給散點圖加標簽并加分隔線繪制矩陣圖以實踐一下以上方法:
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")
矩陣圖繪制示例
繪制瀑布圖綜合運用ax.bar()的參數和文本標簽,并封裝為一個函數,以后使用只需要調用就好:
Matplotlib繪制瀑布圖示例
#瀑布圖
x=[17,-3,7,6] #原始數據
def waterfall_chart(x):
j=0 #sum(x) 最終柱的結果
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) #顏色可傳一個數組的
ax.set_ylim(0, 30)
i=0
for rect in rects: #加上適當的文本標簽
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)
為了更好地展現數據間的聯系或變化,我們有時會需要將多種圖表類型用在同一張可視化圖里,一種是共用坐標軸的組合圖,例如面積圖+柱狀圖的組合、散點+折線圖就是很基礎的組合圖。另一種是雙坐標軸,很常見的圖是左邊的y軸是月活,畫柱狀圖,右邊的y軸是增長率,畫折線圖。
棒棒糖圖(Lollipop)是將條形圖的柱變得很細并突出末端的一類圖,形似棒棒糖,特別適合于展示分類標簽很多的數據。可以通過將柱狀圖和散點圖結合的方法繪制,Matplotlib庫繪制起來并不復雜,代碼如下。但對于一些散點圖的y軸不支持分類標簽的庫來說,要畫棒棒糖圖還是挺復雜的。
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')
有時為了對比兩類數據,除了用簇狀柱形圖或簇狀條形圖外,也可以試試啞鈴圖,理解了上面畫棒棒糖圖的方法之后,要組合出啞鈴圖并不難,對數據進行一定運算后用barh加兩個scatter就可以畫出來。
帕累托圖是雙坐標軸的可視化典例。帕累托圖特別適合展示符合長尾效應的數據。matplotlib給我們提供了ax.twinx()用于生成共用x軸的另一個Axes,效果就是左邊的y軸比例尺和右邊比例尺不一定一樣,能更好地將兩類圖進行效果組合。
y=[23,162,51,119,12,3,8] #模擬數據
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繪制帕累托圖
除了組合圖外,有時候我們也需要將多個圖并排以展現某種數據關系。前面說過一個畫布下可以有多套Axes,正常情況下我們只需要一套Axes用來畫圖,但是也經常需要在一個畫布中畫多張圖,形成分面或子母圖的效果,前面我們基本都是寫fig, ax= plt.subplots(),實際上subplots()可以設置nrows、ncols參數生成多套Axes。
plt.subplots()的常用寫法有:
生成多個繪圖區域
圖中代碼在全局繪圖區域中建立n行、m列的分區繪圖區域,并定位到其中一個子圖區域。之后ax的用法和前面一致,不贅述。
生成的圖片在shell環境中彈出的界面有保存圖片的按鍵,在jupyter環境中可以點擊圖片然后右鍵保存。而如果要通過代碼保存圖片到本地,一般通過plt.savefig(fname,dpi=300)保存圖片,參數有文件保存路徑(fname)、圖片每英寸像素(dpi)、邊緣顏色(edgecolor)等。在shell環境中一般通過plt.show()展示圖片,而jupyter notebook中通常寫%matplotlib inline將圖片直接在Out[]里輸出展示。
Matplotlib的rcParams接口可以設置很多個性化內容,包括剛提到的savefig的edgecolor默認值,可以寫mpl.rcParams["savefig.edgecolor"]='blue'改變原來的默認值white。直方圖的默認分箱數可以通過rcParams["hist.bins"]=5改變。
而為了在Matplotlib中支持中文,各教程的解決方案基本都有mpl.rcParams['font.family']='SimHei'這句,就是將Matplotlib的字體替換為微軟雅黑。前面基礎圖表繪制部分通過更新mpl.rcParams["axes.prop_cycle"]改變了繪圖的主題色,Matplotlib本身是提供了備選的繪圖渲染的各種主題,可以通過style.use('ggplot')調用ggplot主題(想換回默認主題用style.use('default'))。就像給輸入法換皮膚一樣,rcParams接口給了我們更多的自由度和個性化。
三維可視化和科學可視化是Matplotlib特別擅長的領域,人類作為三維生物,對三維的圖像有一定的偏好,扁平化和三維各有優勢,各有不同的應用場合,能畫好二維可視化圖也該會畫三維的圖表,且一些場景用好三維有奇效。Matplotlib的三維可視化封裝在mpl_toolkits工具套件的mplot3d里,mplot3d下的API主要包括Axes3D(三維坐標軸區域)、art3d.xx3D(三維圖元)和proj3d(三維坐標變換)。
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])
三維可視化和科學可視化聯系很緊密,科研作圖中應用廣泛,各種漂亮的參數曲面在官網示例里有很多,這里略過、當然二維下也能畫出很優美的函數圖像,結合numpy生成[0,2]之間的正弦函數曲線只需要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)
繪制指數函數、分形的雪花曲線也是類似的過程,在官網案例集有類似的例子,具體這里不展開。
matplotlib可視化思維導圖
總結下本文從Matplotlib的可視化基礎框架一步步畫散點、折線、柱狀、箱線等圖,通過理解參數拓展畫了瀑布圖、矩陣圖、棒棒糖圖等,并且微調坐標軸文本、標題等圖形元素,讓可視化更完備,通過雙y軸繪制帕累托圖等組合圖,也繪制了包含多張子圖的圖和三維圖。
通過以上實踐可以看到的Matplotlib可視化語法的特點是繪圖對象和標簽標題等元素有一定獨立性,且有不同層級的接口可以用來微調元素,例如設置標題就有多種寫法 ,Matplotlib不同于ggplot2的管道寫法、也不同于Altair等庫將數據傳到chart對象再調用mark_bar()等確定繪制什么圖。可視化是要好看,也不能忘了所展現的數據與數據間的關系是重點。
最后用極坐標繪心形線結束本文。
文中代碼更新于https://github.com/QLWeilcf/VisualizedLyn/blob/master/viz-matplotlib-in-action-lyns.ipynb。代碼可以直接下載運行。有任何建議歡迎留言交流。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。