Python 如何在同一图形上绘制多个列表作为一行?
我想创建一个图,显示与特定地质“蛋糕”层有关的某些参数的可变性。我有一个剖面,每个表面的顶部和底部深度以及每个层的一些物理参数值。顶部和底部以间隔的形式出现(例如[0-5,2];[5-7,1.8];等等)。 我想有一个完整的轮廓图作为一个连续的线。 数据以csv格式存储为表,列名称如下: |顶部| |底部| |值| 我创建了带有数字的列表,用图表所需的数据填充间隔。现在我陷入困境,我不知道如何链接线来创建一个连续的配置文件。 我已经尝试过的代码如下所示:Python 如何在同一图形上绘制多个列表作为一行?,python,numpy,csv,matplotlib,data-visualization,Python,Numpy,Csv,Matplotlib,Data Visualization,我想创建一个图,显示与特定地质“蛋糕”层有关的某些参数的可变性。我有一个剖面,每个表面的顶部和底部深度以及每个层的一些物理参数值。顶部和底部以间隔的形式出现(例如[0-5,2];[5-7,1.8];等等)。 我想有一个完整的轮廓图作为一个连续的线。 数据以csv格式存储为表,列名称如下: |顶部| |底部| |值| 我创建了带有数字的列表,用图表所需的数据填充间隔。现在我陷入困境,我不知道如何链接线来创建一个连续的配置文件。 我已经尝试过的代码如下所示: import numpy as np i
import numpy as np
import matplotlib.pyplot as plt
import csv
with open('data.csv', newline='') as file:
file = csv.reader(file, delimiter=';', quotechar='|')
headers = next(file)
table = list(file)
result = []
for line in table:
top = float(line[0])
bottom = float(line[1])
value = float(line[2])
l = np.arange(top, bottom+1, 1)
Z = [value]*len(l)
ax.plot(Z, l)
ax = plt.axes()
#ax.set_ylim([55,-1])
#ax.set_xlim([1,3])
plt.show()
我的结果如图1所示,但我希望得到类似于图2的结果:
我用的是Spyder 3.6
是否可以从不同的列表中创建一个连续的行?
我不喜欢这个解决方案。感谢您的建议。您可以使用
hlines
在垂直条之间绘制水平线(编造了一些与您的数据相似的假数据):
请注意,您还可以使用vlines
更轻松地绘制垂直线:
import numpy as np
from matplotlib import pyplot
random_data = [5, 8, 17, 25, 32, 50]
values = [1.5, 2.3, 1.7, 2.5, 1.8, 1.8] # Note last value should be duplicate
for i in range(len(random_data) - 1):
top = float(random_data[i])
bottom = float(random_data[i + 1])
value = float(values[i])
value_next = float(values[i + 1])
pyplot.vlines(value, top, bottom)
pyplot.hlines(bottom, value, value_next)
pyplot.show()
您可能需要处理数据限制,但这将提供您想要的。而且我还发现脚本并没有开始从第一个间隔/层绘制线……只是检查我是否理解正确:您希望图1中的垂直线与水平线链接在一起?@Francisca yes,这正是我想要的。设置数据限制后,它工作得非常好!非常感谢你!
import numpy as np
from matplotlib import pyplot
random_data = [5, 8, 17, 25, 32, 50]
values = [1.5, 2.3, 1.7, 2.5, 1.8, 1.8] # Note last value should be duplicate
for i in range(len(random_data) - 1):
top = float(random_data[i])
bottom = float(random_data[i + 1])
value = float(values[i])
value_next = float(values[i + 1])
pyplot.vlines(value, top, bottom)
pyplot.hlines(bottom, value, value_next)
pyplot.show()