整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          dedecms織夢(mèng)文章列表頁(yè)隔行換色/分組加線




          夢(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ào)校

          一張可視化圖上除了主要的點(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)題, 整理如下:

          • ax.text(x,y, "Text"):在坐標(biāo)[x,y]處添加文本Text,文本支持latex公式,如ax.text(2,6, r'$E=mc^2$', fontsize=15);
          • ax.set_title():添加標(biāo)題;
          • ax.set_ylim(0,4) 設(shè)置y軸值的范圍(類似于函數(shù)的值域),例如對(duì)于y=[],直接ax.plot(y)畫(huà)出來(lái)的折線圖y軸范圍是 ,通過(guò)ax.set_ylim(0,4) 可以顯示0~100范圍的效果。同理通過(guò)ax.set_ylim(0,4)設(shè)置x軸范圍(定義域);
          • ax.set_ylabel("Y axis label"):給y軸加上坐標(biāo)軸標(biāo)題;
          • ax.tick_params(which='major', width=1.0):細(xì)調(diào)坐標(biāo)軸刻度;
          • ax.legend() : 設(shè)置圖例 ;


          常用圖表標(biāo)簽添加的接口

          圖形元素設(shè)置除了文本類型之外,也可以往里加形狀 。

          • 加線:import matplotlib.lines as lines;ax.add_artist(lines.Line2D([15,15], [0, 10],color='#1EAFAE')),其效果可參考矩陣圖繪制效果;
          • 加帶箭頭的線: ax.arrow(0, 0, 0.5, 0.5, head_width=0.05, head_length=0.1, fc='k', ec='k');
          • 加一個(gè)垂直的平均線: ax.axvline(x, ls='--', color='r'),那水平平均線呢?axhline(y=0, xmin=0, xmax=1, **kwargs);
          • 加垂直或水平的強(qiáng)調(diào)矩形: ax.axhspan(ymin, ymax, xmin=0, xmax=1, **kwargs) 和 ax.axvspan(xmin, xmax, ymin=0, ymax=1, **kwargs);
          • 加矩形:patches.append(mpatches.Rectangle([0.5, 0.5], 0.5,0.8)),可用于繪制甘特圖;
          • 加圓形(及橢圓): patches.append( mpatches.Ellipse((x,y), width, height));
          • 加帶箭頭的形狀:ax.annotate('箭頭文本', xy=(4,5), xytext=(3,2),color, arrowprops=dict( arrowstyle='->', connectionstyle="arc3")),加圖標(biāo)型的箭頭:patches.append( mpatches.Arrow(x,y, dx,dy,width));
          • 加圖片: mpimg.imread(ipath); ax.axis('off'); ax.imshow(img);

          給散點(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ě)法有:

          • plt.subplot(3,2,4):在全局繪圖區(qū)域中建立3行、2列的分區(qū)繪圖區(qū)域,并定位到第4個(gè)子圖區(qū)域,返回一個(gè)axes;
          • plt.subplot(324): 效果和上面subplot(3,2,4)的寫(xiě)法一致;
          • plt.subplots(): 默認(rèn)1行1列,生成的axes就是一個(gè);
          • plt.subplots(3,2) : 沒(méi)有指定繪圖編號(hào),返回值包括一個(gè)figure和多個(gè)axes,和ax[0, 0].×××(x, y)搭配著用;
          • fig = plt.figure(); ax= fig.add_subplot(221):先建立一個(gè)畫(huà)布,在畫(huà)布上添加2x2個(gè)子圖,并定位到順序第一個(gè)子圖;


          生成多個(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é)可視化

          三維可視化和科學(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)行。有任何建議歡迎留言交流。


          主站蜘蛛池模板: 久久中文字幕无码一区二区| 精品国产一区在线观看| 亚洲国产精品一区第二页 | 日韩精品一区二区亚洲AV观看| 久久亚洲国产精品一区二区 | 国产成人无码一区二区在线播放| 亚洲Av无码一区二区二三区| 国产福利电影一区二区三区久久老子无码午夜伦不 | 无码精品久久一区二区三区 | 国产一区二区三区四| 无码免费一区二区三区免费播放 | 伊人久久大香线蕉av一区| 一区二区三区视频在线| 内射白浆一区二区在线观看| 国产福利微拍精品一区二区| 国产在线精品一区二区中文| 日韩精品无码久久一区二区三| 中文字幕AV无码一区二区三区| 香蕉免费一区二区三区| 日本高清成本人视频一区| 国产主播福利精品一区二区| 亚洲一区二区三区在线网站| 久久精品一区二区免费看| 精品亚洲一区二区三区在线播放| 国产在线一区二区三区av| 97精品一区二区视频在线观看 | 成人精品一区二区三区校园激情 | 蜜桃臀无码内射一区二区三区| 精品国产一区二区三区久久蜜臀| 日韩成人无码一区二区三区| 一区二区三区在线| 一区二区三区四区在线观看视频| 精品国产鲁一鲁一区二区| 中文激情在线一区二区| 亚洲一区二区三区四区视频| 中文字幕一区在线播放| 好爽毛片一区二区三区四 | 一区二区国产在线播放| 大香伊蕉日本一区二区| 国产福利在线观看一区二区| 激情无码亚洲一区二区三区|