使用python畫出馬賽克圖


終於從數模比賽里抽身出來了,重新開始更新我的博客。看的人多少不重要,至少應該保持學習的習慣,寫給自己看也是好的。

數模比賽里使用了python的matplotlib庫來繪制馬賽克圖,用以描述新舊變量之間的相關性。通常在描述一組變量的相關系數時也時常會遇到這種形式的圖。

一張形似這樣的馬賽克圖能夠利用顏色的深淺清楚的顯示出變量相關程度,越深的顏色代表越高的相關程度。

在實現的過程中,借鑒了csdn上一份在坐標軸格子中填上指定顏色的代碼。將要用來決定顏色深淺的數據導入,之后調整參數,在預計的范圍內遍歷所有方格,並利用決定數據處理后輸入RGB三元組等進行漸變色的處理。之后調整軸刻度和顯示范圍,最后輸出。

需要注意的是,輸入color參數的元組其實可以有四個元素,分別代表RGB和Alpha。Alpha影響的是不透明度,是我認為最適合做受影響量的元素。需要注意的是,即便通過標准化使得參數的實際輸入值能在(r1,g1,b1,a1)到(r2,g2,b2,a2)之間變化,也不一定能呈現出良好的分辨效果,因為一組對比分明梯度突出的顏色不一定在四個參數上均保持單調,如果要調整出色彩的變化,則需要對rgb色彩空間有更深入的研究,或者尋找到一個更精確的函數使得隨着控制矩陣中參數值的變化,實際色彩能在顏色空間中預計的復雜曲線上均勻分布。

實現代碼如下:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
import pandas as pd
ax=plt.subplot(111) #注意:一般都在ax中設置,不再plot中設置
base = [[43.52415279,0.171167607,0.949150597,0.537740419,0,0.077707502,0.34940187,1,0.427823377,0.225493431],
[24.01111231,0.603131093,1,0.587208559,0.497111237,0.581739113,0.803619063,0,0.420073441,0.510062647],
[11.33458813,0.682588116,0.009080941,0.653367677,0,0.228701053,0.507700635,0.291378262,0.276630137,1],
[10.88615056,0.010881135,0.008154996,0.817448081,1,0.069059213,0,0.07885205,0.06205499,0.066138246],
[6.919748634,0,0.216365352,0.494286281,0.051161003,1,0.207937394,0.286797799,0.258626256,0.264320298],
[2.459507492,1,0.778585681,0.605509542,0.558508976,0.682487197,0.056163155,0.66307496,0,0.565892723],
[0.810487836,0.764477533,0.4472523,0.248112477,0.410310543,0.528794353,0,0.234337877,1,0.342001398],
[0.042053848,0.838850561,0.401543169,0,0.836124012,0.864181401,1,0.82302059,0.305449539,0.440632198],
[0.012198394,1,0.394399427,0.982218367,0.390090331,0.591117381,0.85629048,0.639190913,0.653017412,0]]
 
for high in range(1,10):
    for i in range(9):
        x1= np.linspace(i,i+1, 10)
        ax.fill_between(x1,high-1,high,cmap='cool',facecolor=(42/256,102/256,236/256,base[i][high]))

#
plt.xlim(0, 9)
plt.ylim(0, 9)
 
ax.xaxis.set_major_locator(MultipleLocator(1))#設置y主坐標間隔 1
ax.yaxis.set_major_locator(MultipleLocator(1))#設置y主坐標間隔 1
ax.xaxis.grid(True,which='major')#major,color='black'
ax.yaxis.grid(True,which='major')#major,color='black'
plt.show()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM