[英]Multivalued Histogram as combined scatter and histogram plot
對於研究中的某些事情,我有一些理論計算。 我想通過采用理論值並將其從實驗值中減去來表示此數據的准確性。 這留下了一些我想繪制以顯示此數據的差異。
我對要查找的情節類型進行了模擬表示。 紅線是曲線的零,表示理論值和實驗值之間沒有差異。 x軸具有V1,V2,...,VN,它們是要計算的不同事物。 問題在於每個V都有兩個或三個之間的值,在我制作的模擬圖中用“ X”表示。
我對如何執行此操作有些迷茫。 我嘗試使用Gnuplot查看多值直方圖,盡管它變成空的。 誰能對此提供任何見解,或者有可行的示例Gnuplot腳本? 如果您知道用Python或其他方式執行此操作的方法,我也願意使用其他方法。 問題是我對Python一無所知。
使用gnuplot有幾種方法可以實現此目的。 這是一個我認為很合理的選擇:
將屬於一個v
值的值存儲在一個數據塊中。 兩個數據塊之間用兩條新行隔開。 因此,示例數據文件可能是:
# v1 values -0.5 1.1 0.4 -0.2 # v2 values -0.1 0.1 -0.7 # v3 values 0.9 0.5 0.2
標簽存儲在字符串中,以空格分隔。 (為此,您只能使用本身不包含空格的標簽,引用不起作用)。
labels = "v1 v2 v3"
作為x軸的數值,您可以獲取數據塊的編號,該編號是通過特殊列-2
,即using (column(-2))
。 該數字還可用於訪問labels
字符串中的相應標簽。
這是一個示例腳本:
set xzeroaxis lc rgb 'red' lt 1 lw 2
set offset 0.2,0.2,0,0
set xtics 1
unset key
set linetype 1 linetype 2 lc rgb 'black' lw 2
labels = "v1 v2 v3"
plot 'data.dat' using (column(-2)):1:xtic(word(labels, column(-2)+1))
4.6.5的結果是:
當然,根據您的實際需求,您可以有很多選擇來修改或擴展此腳本。
您似乎沒有在計算任何東西,因此您的圖不是直方圖。 這是一堆水平排列的垂直一維散點圖。
以下內容使用matplotlib來接近您的模型(出於習慣,我將“ Differences”重命名為相當傳統的術語“ Residuals”):
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(123)
# Demo data consists of a list of names of the "variables",
# and a list of the residuals (in numpy arrays) for each variable.
names = ['V1', 'V2', 'V3', 'V4']
r1 = np.random.randn(3)
r2 = np.random.randn(2)
r3 = np.random.randn(3)
r4 = np.random.randn(3)
residuals = [r1, r2, r3, r4]
# Make the plot
for k, (name, res) in enumerate(zip(names, residuals)):
plt.plot(np.zeros_like(res) + k, res, 'kx',
markersize=7.0, markeredgewidth=2)
plt.ylabel("Residuals", fontsize=14)
plt.xlim(-1, len(names))
ax = plt.gca()
ax.set_xticks(range(len(names)))
ax.set_xticklabels(names)
plt.axhline(0, color='r')
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.