接下來(lái)小編來(lái)給大家分享一種有意思的數(shù)據(jù)可視化方法,便是如何運(yùn)用Python語(yǔ)言表達(dá)即從照片中提取顏色隨后制作成可視化圖表,有興趣的話可以試一試。
今天小編來(lái)為大家分享一個(gè)有趣的可視化技巧,如何從圖片中提取顏色然后繪制成可視化圖表,如下圖所示
在示例照片當(dāng)中有著各種各樣的顏色,我們將通過(guò)Python中的可視化模塊以及opencv模塊來(lái)識(shí)別出圖片當(dāng)中所有的顏色要素,并且將其添加到可視化圖表的配色當(dāng)中
導(dǎo)入模塊并加載圖片
那么按照慣例,第一步一般都是導(dǎo)入模塊,可視化用到的模塊是matplotlib模塊,我們將圖片中的顏色抽取出來(lái)之后會(huì)保存在顏色映射表中,所以要使用到colormap模塊,同樣也需要導(dǎo)入進(jìn)來(lái)
import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.patches as patches import matplotlib.image as mpimg from PIL import Image from matplotlib.offsetbox import OffsetImage,AnnotationBbox import cv2 import extcolors from colormap import rgb2hex
然后我們先來(lái)加載一下圖片,代碼如下
input_name='test_1.png' img=plt.imread(input_name) plt.imshow(img) plt.axis('off') plt.show()
output
提取顏色并整合成表格
我們調(diào)用的是extcolors模塊來(lái)從圖片中提取顏色,輸出的結(jié)果是RGB形式呈現(xiàn)出來(lái)的顏色,代碼如下
colors_x=extcolors.extract_from_path(img_url,tolerance=12,limit=12) colors_x
output
([((3,107,144),180316),
((17,129,140),139930),
((89,126,118),134080),
((125,148,154),20636),
((63,112,126),18728),
((207,220,226),11037),
((255,255,255),7496),
((28,80,117),4972),
((166,191,198),4327),
((60,150,140),4197),
((90,94,59),3313),
((56,66,39),1669)],
538200)
我們將上述的結(jié)果整合成一個(gè)DataFrame數(shù)據(jù)集,代碼如下
def color_to_df(input_color): colors_pre_list=str(input_color).replace('([(','').split(',(')[0:-1] df_rgb=[i.split('),')[0]+')'for i in colors_pre_list] df_percent=[i.split('),')[1].replace(')','')for i in colors_pre_list] #將RGB轉(zhuǎn)換成十六進(jìn)制的顏色 df_color_up=[rgb2hex(int(i.split(",")[0].replace("(","")), int(i.split(",")[1]), int(i.split(",")[2].replace(")","")))for i in df_rgb] df=pd.DataFrame(zip(df_color_up,df_percent),columns=['c_code','occurence']) return df
我們嘗試調(diào)用上面我們自定義的函數(shù),輸出的結(jié)果至DataFrame數(shù)據(jù)集當(dāng)中
df_color=color_to_df(colors_x) df_color
output
繪制圖表
接下來(lái)便是繪制圖表的階段了,用到的是matplotlib模塊,代碼如下
fig,ax=plt.subplots(figsize=(90,90),dpi=10) wedges,text=ax.pie(list_precent, labels=text_c, labeldistance=1.05, colors=list_color, textprops={'fontsize':120,'color':'black'} ) plt.setp(wedges,width=0.3) ax.set_aspect("equal") fig.set_facecolor('white') plt.show()
output
最后制作一張調(diào)色盤(pán),將原圖中的各種不同顏色都羅列開(kāi)來(lái),代碼如下
##調(diào)色盤(pán) x_posi,y_posi,y_posi2=160,-170,-170 for c in list_color: if list_color.index(c)<=5: y_posi+=180 rect=patches.Rectangle((x_posi,y_posi),360,160,facecolor=c) ax2.add_patch(rect) ax2.text(x=x_posi+400,y=y_posi+100,s=c,fontdict={'fontsize':190}) else: y_posi2+=180 rect=patches.Rectangle((x_posi+1000,y_posi2),360,160,facecolor=c) ax2.add_artist(rect) ax2.text(x=x_posi+1400,y=y_posi2+100,s=c,fontdict={'fontsize':190}) ax2.axis('off') fig.set_facecolor('white') plt.imshow(bg) plt.tight_layout()
output
實(shí)戰(zhàn)環(huán)節(jié)
這一塊兒是實(shí)戰(zhàn)環(huán)節(jié),我們將上述所有的代碼封裝成一個(gè)完整的函數(shù)
def exact_color(input_image,resize,tolerance,zoom): output_width=resize img=Image.open(input_image) if img.size[0]>=resize: wpercent=(output_width/float(img.size[0])) hsize=int((float(img.size[1])*float(wpercent))) img=img.resize((output_width,hsize),Image.ANTIALIAS) resize_name='resize_'+input_image img.save(resize_name) else: resize_name=input_image fig.set_facecolor('white') ax2.axis('off') bg=plt.imread('bg.png') plt.imshow(bg) plt.tight_layout() return plt.show() exact_color('test_2.png',900,12,2.5)
output
綜上所述,這篇文章就給大家介紹到這里了,希望可以給各位讀者帶來(lái)幫助。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/128689.html
文中關(guān)鍵給大家介紹了python大大數(shù)據(jù)可視化matplotlib制做復(fù)式統(tǒng)計(jì)表的案例詳細(xì)說(shuō)明,感興趣的小伙伴可以參考借鑒一下,希望可以有一定的幫助,祝愿大家多多的發(fā)展,盡早漲薪 plt.plot()函數(shù)公式各主要參數(shù)分析 plt.plot()函數(shù)的作用是制做復(fù)式統(tǒng)計(jì)表,它主要參數(shù)有許多,常用的函數(shù)主要參數(shù)如下所示: plt.plot(x,y,color,linestyle,linewi...
摘要:下面,作者介紹了八種在中實(shí)現(xiàn)的可視化工具包,其中有些包還能用在其它語(yǔ)言中。當(dāng)提到這些可視化工具時(shí),我想到三個(gè)詞探索數(shù)據(jù)分析。還可以選擇樣式,它模擬了像和等很流行的美化工具。有很多數(shù)據(jù)可視化的包,但沒(méi)法說(shuō)哪個(gè)是最好的。 showImg(https://segmentfault.com/img/remote/1460000019029121); 作者:Aaron Frederick 喜歡用...
摘要:當(dāng)數(shù)據(jù)發(fā)生變化時(shí),這種演變過(guò)程隨之發(fā)生。是一種統(tǒng)計(jì)報(bào)告圖,由一系列高度不等的縱向條紋或線段表示數(shù)據(jù)分布的情況。 showImg(https://segmentfault.com/img/bVbnkP1?w=751&h=558); python相關(guān) 基礎(chǔ)概念 數(shù)據(jù):離散的,客觀事實(shí)的數(shù)字表示 信息:處理后的數(shù)據(jù),為實(shí)際問(wèn)題提供答案 - 為數(shù)據(jù)提供一種關(guān)系或一個(gè)關(guān)聯(lián)后,數(shù)據(jù)就成了信...
熱力地圖的適用場(chǎng)景有敘述數(shù)據(jù)信息和空間的集中程度上,普遍有城市熱力圖、地區(qū)熱力地圖,敘述好幾個(gè)自變量中間關(guān)聯(lián)性多少程度上,文中關(guān)鍵為大家介紹了有關(guān)python熱力地圖完成的資料,必須的小伙伴可以借鑒一下 一、數(shù)據(jù)信息無(wú)量綱處理后的(熱力地圖) 1.數(shù)據(jù)信息無(wú)量綱處理后的(僅詳細(xì)介紹文中需要用到的方式):min-max歸一化處理 此方法應(yīng)該是原始記錄開(kāi)展線性變換,把它投射到[0,1]中間,...
摘要:俗話說(shuō),不會(huì)使用工具來(lái)完成任務(wù)的都是進(jìn)化不完全的表現(xiàn),大數(shù)據(jù)時(shí)代,可視化已經(jīng)深深鉆進(jìn)我們的生活,使用可視化工具也變的相當(dāng)普遍,今天我們來(lái)總結(jié)下當(dāng)下可視化工具都有哪些。是一個(gè)地圖庫(kù),主要面向數(shù)據(jù)可視化用戶。 俗話說(shuō),不會(huì)使用工具來(lái)完成任務(wù)的都是進(jìn)化不完全的表現(xiàn),大數(shù)據(jù)時(shí)代,可視化已經(jīng)深深鉆進(jìn)我們的生活,使用可視化工具也變的相當(dāng)普遍,今天我們來(lái)總結(jié)下當(dāng)下可視化工具都有哪些。 showImg...
閱讀 923·2023-01-14 11:38
閱讀 895·2023-01-14 11:04
閱讀 756·2023-01-14 10:48
閱讀 2055·2023-01-14 10:34
閱讀 961·2023-01-14 10:24
閱讀 840·2023-01-14 10:18
閱讀 510·2023-01-14 10:09
閱讀 588·2023-01-14 10:02