寫在前面
上一篇文章為大家分享了山脊圖和氣泡圖的繪圖方法與代碼,這里學(xué)姐為繼續(xù)為大家分享百分比堆疊線條圖和火山圖,包含matlab和python的完整代碼,需要完整代碼的同學(xué)看文章最后,另外,如果沒有美賽經(jīng)驗想要獲獎,歡迎咨詢哦~
百分比堆疊線條圖
百分比堆疊線條圖是一種數(shù)據(jù)可視化工具,它結(jié)合了堆疊面積圖和線條圖的特點。在這種圖表中,時間序列數(shù)據(jù)被分成幾個部分,每個部分代表一個類別,所有類別的值加起來總和為100%。這種圖的每個點的堆疊區(qū)域代表不同類別在特定時間點的百分比貢獻(xiàn)。
優(yōu)點
- 展示趨勢和組成: 百分比堆疊線條圖可以同時顯示各個組成部分隨時間變化的趨勢以及它們對總量的相對貢獻(xiàn)。
- 比較容易: 由于總量始終為100%,用戶可以很容易地比較不同類別在不同時間點的相對大小。
- 節(jié)省空間:相比于多個分開的圖表,一個百分比堆疊線條圖能在單一視圖中顯示多個類別的信息。
- 視覺連續(xù)性:這種圖表類型利用顏色和堆疊區(qū)域的連續(xù)性,有助于觀察者追蹤隨時間變化的趨勢。
缺點
- 局限性: 只能顯示部分總和恒等于100%的數(shù)據(jù),不適合絕對值變化很大的數(shù)據(jù)。
- 誤導(dǎo)性: 如果某個類別的變化很大,可能會造成視覺上的誤導(dǎo),觀察者可能認(rèn)為其他類別也有相同比例的變化。
- 難以精確讀?。?對于堆疊的中間部分,很難從圖表中讀取精確的數(shù)值,尤其是當(dāng)多個類別顏色相似或者區(qū)域較小的時候。
- 順序敏感性: 類別的堆疊順序可能會影響讀圖的難易程度,一般來說,底部的類別最容易讀取,而上層的則較難。
實現(xiàn)
在實際應(yīng)用中,選擇使用百分比堆疊線條圖還是其他類型的圖表應(yīng)該基于數(shù)據(jù)的特點以及想要傳達(dá)的信息。如果目標(biāo)是展示多個類別隨時間的相對變化,并且每個類別的總和固定,則百分比堆疊線條圖是一個很好的選擇。如果數(shù)據(jù)中的類別總和不是固定的,或者需要展示絕對值的變化,則可能需要選擇其他類型的圖表。
python
import matplotlib.pyplot as plt
import numpy as np
# Create sample data
categories = ['Category 1', 'Category 2', 'Category 3', 'Category 4']
months = ['January', 'February', 'March', 'April', 'May', 'June']
data = np.array([
[20, 30, 35, 35, 30, 25], # Category 1
[25, 25, 25, 20, 20, 25], # Category 2
[30, 25, 20, 25, 30, 30], # Category 3
[25, 20, 20, 20, 20, 20] # Category 4
])
# Normalize data to sum to 1 (100%)
data_perc = data / data.sum(axis=0)
# Plot stackplot
fig, ax = plt.subplots(figsize=(10, 6))
ax.stackplot(months, data_perc, labels=categories)
# Add legend
ax.legend(loc='upper left')
# Add titles and labels
ax.set_title('Percentage Stacked Line Bar Chart Example')
ax.set_ylabel('Percentage')
ax.set_xlabel('Month')
# Display the plot
plt.tight_layout()
plt.show()
為了對百分比堆疊線條圖進(jìn)行了美化,使用了一組更鮮明的顏色來區(qū)分不同的類別。
在每個類別的邊緣添加了更清晰的界限,添加了網(wǎng)格線以提高可讀性,旋轉(zhuǎn)了X軸標(biāo)簽,使它們更易讀,增加了標(biāo)題和軸標(biāo)簽的字體大小,并使標(biāo)題加粗, 改進(jìn)了圖例的顯示位置,并調(diào)整了字體大小,設(shè)置Y軸以顯示百分比符號。如下所示
matlab
% Sample data for the four categories over six months
data = [
20 30 35 35 30 25; % Category 1
25 25 25 20 20 25; % Category 2
30 25 20 25 30 30; % Category 3
25 20 20 20 20 20 % Category 4
];
% Normalize the data to sum to 100%
data_perc = bsxfun(@rdivide, data, sum(data)) * 100;
% Create a vector to represent the months as numbers
months_num = 1:6;
% Plot the area
fig = figure;
ax = axes(fig);
stackedarea = area(ax, months_num, data_perc', 'LineStyle', 'none');
% Define the colors for each category
colors = lines(4); % Generate 4 distinct colors
% Apply the colors to the areas
for i = 1:length(stackedarea)
stackedarea(i).FaceColor = colors(i,:);
end
% Customize the axes and the plot
set(ax, 'XTick', months_num, 'XTickLabel', {'January', 'February', 'March', 'April', 'May', 'June'});
ylabel('Percentage');
title('Percentage Stacked Line Bar Chart Example');
legend({'Category 1', 'Category 2', 'Category 3', 'Category 4'}, 'Location', 'EastOutside');
grid on;
% Add Y-axis labels with percentage
yticks = get(ax, 'ytick');
new_labels = strcat(num2str(yticks'), '%');
set(ax, 'yticklabel', new_labels);
火山圖
火山圖是生物信息學(xué)中常用的一種圖表,用來顯示基因表達(dá)數(shù)據(jù)的變化。它通常將每個點表示為一個基因,x軸顯示對數(shù)比率(log ratio),表示基因表達(dá)的變化大小;y軸顯示-log10(p-value),表示變化的統(tǒng)計顯著性。在火山圖中,通常會看到分布在兩側(cè)的點表示表達(dá)上升或下降的基因,而分布在中間的點表示沒有顯著變化的基因。這種圖表有助于快速識別在特定條件下顯著上調(diào)或下調(diào)的基因。
火山圖是一種功能強大的數(shù)據(jù)展示方法,它不僅能夠顯示單個基因或蛋白質(zhì)的變化,還能在生物學(xué)上下文中提供這些變化的全局視圖。通過這種方式,火山圖幫助研究人員理解實驗條件下生物學(xué)系統(tǒng)的整體響應(yīng)。
優(yōu)點
- 差異表達(dá)基因的可視化:火山圖是用來直觀顯示成千上萬個基因或蛋白質(zhì)之間表達(dá)水平差異顯著性的工具。每個點代表一個基因或蛋白質(zhì),它的位置基于表達(dá)變化的大小(通常是對數(shù)變化率)和這種變化的統(tǒng)計顯著性。
- 篩選重要目標(biāo):火山圖可以用來快速識別和篩選出那些表達(dá)變化最大且統(tǒng)計顯著的基因或蛋白質(zhì)。這些通常是研究中的關(guān)鍵分子,可能是疾病標(biāo)記物或藥物靶標(biāo)。
- 趨勢觀察:通過觀察點的分布,研究人員可以了解基因表達(dá)變化的總體趨勢,例如是否有很多基因表達(dá)上升或下降,以及變化是否集中在某個特定區(qū)域。
- 數(shù)據(jù)質(zhì)量評估:火山圖也可以幫助研究人員評估實驗數(shù)據(jù)的質(zhì)量。理想情況下,大多數(shù)基因應(yīng)該集中在圖的中部,表示沒有顯著差異,而顯著差異的基因應(yīng)該均勻地分布在左右兩側(cè)。
- 交互式探索:現(xiàn)代生物信息學(xué)軟件提供的火山圖通常是交互式的,允許用戶點擊特定的點來獲取更多關(guān)于該基因或蛋白質(zhì)的信息,如名稱、功能以及與其他分子的關(guān)聯(lián)。
- 組合其他分析:火山圖常與其他生物信息學(xué)工具和分析結(jié)合使用,比如富集分析、網(wǎng)絡(luò)分析等,來進(jìn)一步探索和解釋數(shù)據(jù)中的生物學(xué)現(xiàn)象。
- 通信工具:作為一種強有力的視覺工具,火山圖可以在學(xué)術(shù)出版物、研究報告和演示中,幫助解釋復(fù)雜的統(tǒng)計數(shù)據(jù),并傳達(dá)研究的關(guān)鍵發(fā)現(xiàn)。
實現(xiàn)
python
import matplotlib.pyplot as plt
import numpy as np
# 生成示例數(shù)據(jù)
np.random.seed(0)
x = np.random.normal(size=1000)
y = -np.log10(np.random.uniform(low=0.001, high=1.0, size=1000))
# 分類條件,隨機分配,僅用于示例
conditions = np.random.choice(['up', 'down', 'nodiff'], size=1000, p=[0.1, 0.1, 0.8])
# 創(chuàng)建火山圖
plt.figure(figsize=(8, 6))
plt.scatter(x[conditions == 'up'], y[conditions == 'up'], color='r', label='up')
plt.scatter(x[conditions == 'down'], y[conditions == 'down'], color='b', label='down')
plt.scatter(x[conditions == 'nodiff'], y[conditions == 'nodiff'], color='grey', alpha=0.5, label='nodiff')
# 添加必要的標(biāo)簽和標(biāo)題
plt.title('Volcano Plot')
plt.xlabel('Log2 Fold Change')
plt.ylabel('-Log10 p-value')
# 添加圖例
plt.legend()
# 顯示圖表
plt.show()
matlab
% 假設(shè)數(shù)據(jù)
logFoldChange = randn(1000,1); % 隨機生成對數(shù)變化倍數(shù)
pValues = rand(1000,1); % 隨機生成p值
% 設(shè)置閾值
pValueThreshold = 0.05; % p值顯著性閾值
logFoldChangeThreshold = 1; % 對數(shù)變化倍數(shù)閾值
% 計算統(tǒng)計顯著性
negLogPValues = -log10(pValues); % 計算負(fù)對數(shù)p值
% 分類基因表達(dá)變化
upRegulated = logFoldChange > logFoldChangeThreshold & pValues < pValueThreshold;
downRegulated = logFoldChange < -logFoldChangeThreshold & pValues < pValueThreshold;
notRegulated = ~upRegulated & ~downRegulated;
% 繪制火山圖
figure;
hold on;
scatter(logFoldChange(upRegulated), negLogPValues(upRegulated), 40,'blue', 'filled');
scatter(logFoldChange(downRegulated), negLogPValues(downRegulated), 40, 'red', 'filled');
scatter(logFoldChange(notRegulated), negLogPValues(notRegulated), 10, 'black');
% 標(biāo)注顯著的點
significantPoints = find(pValues < pValueThreshold);
for i = 1:length(significantPoints)
text(logFoldChange(significantPoints(i)), negLogPValues(significantPoints(i)), ...
num2str(significantPoints(i)), 'FontSize', 8);
end
% 增加參考線
line(xlim(), [-log10(pValueThreshold) -log10(pValueThreshold)], 'Color', 'green', 'LineStyle', '--');
line([-logFoldChangeThreshold -logFoldChangeThreshold], ylim(), 'Color', 'green', 'LineStyle', '--');
line([logFoldChangeThreshold logFoldChangeThreshold], ylim(), 'Color', 'green', 'LineStyle', '--');
% 添加軸標(biāo)簽和標(biāo)題
xlabel('Log2 Fold Change');
ylabel('-Log10 p-Value');
title('Volcano Plot');
% 添加圖例
legend({'Up-regulated', 'Down-regulated', 'Not significant'}, 'Location', 'northeastoutside');
% 格式化圖像
set(gca, 'FontSize', 12);
grid on;
hold off;
為了進(jìn)一步美化,我們可以添加一些額外的格式設(shè)置,例如自定義顏色,透明度,以及改進(jìn)的標(biāo)注。如下所示,
最后
文章來源:http://www.zghlxwxcb.cn/news/detail-803299.html
更多完整繪圖代碼可以看下面哦,可免費獲取。文章來源地址http://www.zghlxwxcb.cn/news/detail-803299.html
到了這里,關(guān)于【數(shù)學(xué)建模美賽M獎速成系列】數(shù)據(jù)可視化(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!