24小时热门版块排行榜    

查看: 2577  |  回复: 9

ConAntares

捐助贵宾 (初入文坛)

混沌的学渣

[求助] Matplotlib 三维绘图问题 已有1人参与

首先,我用Fortran程序计算出我想要的数据,为三列,保存在一个 .dat的文件里。
格式如下:(x, y, z代表各自列上的数据,z和y之间存在关系 z=f(y))
x1    y1    z1=f(y1)
x1    y2    z2=f(y2)
x1    y3    z3=f(y3)
……
x2    y1    z'1=f'(y1)
x2    y2    z'2=f'(y2)
x2    y3    z'3=f'(y3)
……
……
x2    y1    z''1=f'(y1)
x2    y2    z''2=f'(y2)
x2    y3    z''3=f'(y3)
……
大致意思是x每做一个循环,都算一遍 z=f(y) 的函数图像,其中x和f是有关系的。

而且y轴很长,我想只画出前一的部分。

想画出如 mat.jpg 所示的图

后来我的Matplotlib语言如下:
CODE:
import matplotlib
import mpl_toolkits.mplot3d
import numpy as np
import pylab

from matplotlib import cm
from matplotlib import rc
from mpl_toolkits.mplot3d import axes3d

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

#X, Y, Z = axes3d.get_test_data(0.05)

with open('CurrentLTVC.dat', 'r') as fig:
    x = []
    y = []
    z = []
    i = 0
    for line in fig:
        data = line.split()
        x.append((float(data[0])))
        y.append((float(data[1])))
        z.append((float(data[2])))


ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='red')

plt.ylim(0.1, 20)
plt.show()

但是绘出图像: figure_1.png 的效果却不尽人意,不仅没法控制绘出图像的范围,而且还有连接处的斜线。
求教如何修改成我想要的结果。

Matplotlib 三维绘图问题
mat.jpg


Matplotlib 三维绘图问题-1
figure_1.png
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

我很好玩哦,不信你玩玩看~
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ConAntares

捐助贵宾 (初入文坛)

混沌的学渣

链接处的线该如何消除?

我做了差不多两百个这样的数据,如果再做一次那工程量我实在是承受不起。

附件里面有示范数据,求好心人帮帮忙,老司机带带我。

TvT
Matplotlib 三维绘图问题-2
figure_2.png

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : CurrentLTVC.dat
  • 2017-04-07 04:19:15, 5.83 M
我很好玩哦,不信你玩玩看~
2楼2017-04-07 04:19:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ConAntares

捐助贵宾 (初入文坛)

混沌的学渣

再补充一下,我的Python版本是3.5,Matplotlib是最新的版本,希望有大佬带我飞一波。
我的论文其他配图都用Matplotlib做好了,就差几个三维的数据可视化图形了。
我很好玩哦,不信你玩玩看~
3楼2017-04-07 05:01:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

约束陶瓷装甲

金虫 (正式写手)


jjdg: 金币+1, 感谢参与 2017-04-12 00:18:41
x=x1,x2,x3,...,xn要用循环分成n次来plot,而不是一次plot,一次plot的结果就是连在一起。

[ 发自手机版 http://muchong.com/3g ]
4楼2017-04-07 05:38:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Mr__Right

专家顾问 (著名写手)

【答案】应助回帖


感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2017-04-12 00:18:47
可以先二维样条插值拟合,再用 plot_wireframe
文章乃身外之物,要多考虑编辑、审稿人和读者的感受。
5楼2017-04-07 11:23:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ConAntares

捐助贵宾 (初入文坛)

混沌的学渣

引用回帖:
4楼: Originally posted by 约束陶瓷装甲 at 2017-04-07 05:38:50
x=x1,x2,x3,...,xn要用循环分成n次来plot,而不是一次plot,一次plot的结果就是连在一起。

那显示范围怎么调整呢

发自小木虫IOS客户端
我很好玩哦,不信你玩玩看~
6楼2017-04-07 13:54:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ConAntares

捐助贵宾 (初入文坛)

混沌的学渣

引用回帖:
5楼: Originally posted by Mr__Right at 2017-04-07 11:23:59
可以先二维样条插值拟合,再用 plot_wireframe

本人python小白 大佬能否给个轮子?

发自小木虫IOS客户端
我很好玩哦,不信你玩玩看~
7楼2017-04-07 13:58:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ConAntares

捐助贵宾 (初入文坛)

混沌的学渣

最后还是解决了,走了一些弯路。

一开始对第二列数据做循环判断语句也可以完成,但是时间太久了,画一个图要好几个小时。
后来,用 bat 把输出文件给拆成二维数据了又给剪切成合适的长度,然后就OK了,秒出图。
Matplotlib 三维绘图问题-3
GV-Ts100-L.png


Matplotlib 三维绘图问题-4
GV-Ts100-R.png

我很好玩哦,不信你玩玩看~
8楼2017-04-11 21:22:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ConAntares

捐助贵宾 (初入文坛)

混沌的学渣

为了帮助有同样问题的人,我把绘图程序代码贴上上来了。

处理数据文件的 bat 执行程序是我上网找的,其实我也不会编,好在资源很丰富。

我的程序是 Python3.5 中的 Matplotlib2.0 数据可视化程序包
CODE:
################################################################ ####    A 3D Drawing Program ####    Version of April 11, 2017 ####    Lu Niu ################################################################  import matplotlib.pyplot as plt import numpy as np  from matplotlib import pyplot as plt from matplotlib import rc from mpl_toolkits.mplot3d import Axes3D  fig = plt.figure(figsize=(8, 6)) ax = Axes3D(fig)  plt.rc('font', family='serif') ax.text2D(0.20, 0.72, 'Left Current', fontsize = 16, transform=ax.transAxes) ax.text2D(0.22, 0.68, '$\\tau_s=0.1ps$', fontsize = 16, transform=ax.transAxes) #### J10 with open('G-E01-Ts001-J10-e01-P10-TVC/CurrentLTVC00.dat', 'r') as fig:     x = 0.0     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#D62728', lw='1.6', antialiased=True) with open('G-E01-Ts001-J10-e01-P10-TVC/CurrentLTVC02.dat', 'r') as fig:     x = 0.2     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#D62728', lw='1.6', antialiased=True) with open('G-E01-Ts001-J10-e01-P10-TVC/CurrentLTVC04.dat', 'r') as fig:     x = 0.4     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#D62728', lw='1.6', antialiased=True) with open('G-E01-Ts001-J10-e01-P10-TVC/CurrentLTVC06.dat', 'r') as fig:     x = 0.6     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#D62728', lw='1.6', antialiased=True) with open('G-E01-Ts001-J10-e01-P10-TVC/CurrentLTVC08.dat', 'r') as fig:     x = 0.8     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#D62728', lw='1.6', antialiased=True) with open('G-E01-Ts001-J10-e01-P10-TVC/CurrentLTVC10.dat', 'r') as fig:     x = 1.0     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#D62728', lw='1.6', antialiased=True)  #### J01 with open('G-E01-Ts001-J01-e01-P10-TVC/CurrentLTVC00.dat', 'r') as fig:     x = 0.0     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#FF7F0E', lw='1.6', antialiased=True) with open('G-E01-Ts001-J01-e01-P10-TVC/CurrentLTVC02.dat', 'r') as fig:     x = 0.2     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#FF7F0E', lw='1.6', antialiased=True) with open('G-E01-Ts001-J01-e01-P10-TVC/CurrentLTVC04.dat', 'r') as fig:     x = 0.4     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#FF7F0E', lw='1.6', antialiased=True) with open('G-E01-Ts001-J01-e01-P10-TVC/CurrentLTVC06.dat', 'r') as fig:     x = 0.6     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#FF7F0E', lw='1.6', antialiased=True) with open('G-E01-Ts001-J01-e01-P10-TVC/CurrentLTVC08.dat', 'r') as fig:     x = 0.8     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#FF7F0E', lw='1.6', antialiased=True) with open('G-E01-Ts001-J01-e01-P10-TVC/CurrentLTVC10.dat', 'r') as fig:     x = 1.0     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#FF7F0E', lw='1.6', antialiased=True)  #### J00 with open('G-E01-Ts001-J00-e01-P10-TVC/CurrentLTVC00.dat', 'r') as fig:     x = 0.0     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#1F77B4', lw='1.6', antialiased=True) with open('G-E01-Ts001-J00-e01-P10-TVC/CurrentLTVC02.dat', 'r') as fig:     x = 0.2     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#1F77B4', lw='1.6', antialiased=True) with open('G-E01-Ts001-J00-e01-P10-TVC/CurrentLTVC04.dat', 'r') as fig:     x = 0.4     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#1F77B4', lw='1.6', antialiased=True) with open('G-E01-Ts001-J00-e01-P10-TVC/CurrentLTVC06.dat', 'r') as fig:     x = 0.6     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#1F77B4', lw='1.6', antialiased=True) with open('G-E01-Ts001-J00-e01-P10-TVC/CurrentLTVC08.dat', 'r') as fig:     x = 0.8     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#1F77B4', lw='1.6', antialiased=True) with open('G-E01-Ts001-J00-e01-P10-TVC/CurrentLTVC10.dat', 'r') as fig:     x = 1.0     y = []     z = []     for line in fig:         data = line.split()         y.append((float(data[1])))         z.append((float(data[2]))) ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#1F77B4', lw='1.6', antialiased=True)  ax.view_init(30, 30) ax.set_xlim3d(0, 1) ax.set_ylim3d(0, 4) ax.set_zlim3d(-0.10, 0.25) ax.set_xlabel(r'Voltage $(V)$', family='serif', fontsize=14) ax.set_ylabel(r'Time $(ps)$', family='serif', fontsize=14) ax.set_zlabel(r'Current $(nA)$', family='serif', fontsize=14)  plt.xticks([0, 0.2, 0.4, 0.6, 0.8, 1.0], fontsize=12) plt.yticks([0.0, 0.5, 1.0, 1,5, 2.0, 2.5, 3.0, 3.5, 4.0], fontsize=12) ax.set_zticks([-0.10,-0.05,0,0.05,0.10,0.15,0.20,0.25]) #ax.set_zticks(np.arange(0,6,1.0)) plt.gca().invert_xaxis()  plt.savefig('GV-Ts001-L.png', dpi=512) plt.savefig('GV-Ts001-L.eps', dpi=512) plt.show()

我很好玩哦,不信你玩玩看~
9楼2017-04-11 21:25:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ConAntares

捐助贵宾 (初入文坛)

混沌的学渣

★ ★ ★ ★ ★
jjdg: 金币+5, 感谢分享经验 2017-04-12 00:20:02
楼上怎么出乱码了!?!?
CODE:
################################################################
####    A 3D Drawing Program
####    Version of April 11, 2017
####    Lu Niu
################################################################

import matplotlib.pyplot as plt
import numpy as np

from matplotlib import pyplot as plt
from matplotlib import rc
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(8, 6))
ax = Axes3D(fig)

plt.rc('font', family='serif')
ax.text2D(0.20, 0.72, 'Left Current', fontsize = 16, transform=ax.transAxes)
ax.text2D(0.22, 0.68, '$\\tau_s=0.1ps$', fontsize = 16, transform=ax.transAxes)
#### J10
with open('G-E01-Ts001-J10-e01-P10-TVC/CurrentLTVC00.dat', 'r') as fig:
    x = 0.0
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#D62728', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J10-e01-P10-TVC/CurrentLTVC02.dat', 'r') as fig:
    x = 0.2
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#D62728', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J10-e01-P10-TVC/CurrentLTVC04.dat', 'r') as fig:
    x = 0.4
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#D62728', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J10-e01-P10-TVC/CurrentLTVC06.dat', 'r') as fig:
    x = 0.6
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#D62728', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J10-e01-P10-TVC/CurrentLTVC08.dat', 'r') as fig:
    x = 0.8
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#D62728', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J10-e01-P10-TVC/CurrentLTVC10.dat', 'r') as fig:
    x = 1.0
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#D62728', lw='1.6', antialiased=True)

#### J01
with open('G-E01-Ts001-J01-e01-P10-TVC/CurrentLTVC00.dat', 'r') as fig:
    x = 0.0
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#FF7F0E', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J01-e01-P10-TVC/CurrentLTVC02.dat', 'r') as fig:
    x = 0.2
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#FF7F0E', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J01-e01-P10-TVC/CurrentLTVC04.dat', 'r') as fig:
    x = 0.4
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#FF7F0E', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J01-e01-P10-TVC/CurrentLTVC06.dat', 'r') as fig:
    x = 0.6
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#FF7F0E', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J01-e01-P10-TVC/CurrentLTVC08.dat', 'r') as fig:
    x = 0.8
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#FF7F0E', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J01-e01-P10-TVC/CurrentLTVC10.dat', 'r') as fig:
    x = 1.0
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#FF7F0E', lw='1.6', antialiased=True)

#### J00
with open('G-E01-Ts001-J00-e01-P10-TVC/CurrentLTVC00.dat', 'r') as fig:
    x = 0.0
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#1F77B4', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J00-e01-P10-TVC/CurrentLTVC02.dat', 'r') as fig:
    x = 0.2
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#1F77B4', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J00-e01-P10-TVC/CurrentLTVC04.dat', 'r') as fig:
    x = 0.4
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#1F77B4', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J00-e01-P10-TVC/CurrentLTVC06.dat', 'r') as fig:
    x = 0.6
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#1F77B4', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J00-e01-P10-TVC/CurrentLTVC08.dat', 'r') as fig:
    x = 0.8
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#1F77B4', lw='1.6', antialiased=True)
with open('G-E01-Ts001-J00-e01-P10-TVC/CurrentLTVC10.dat', 'r') as fig:
    x = 1.0
    y = []
    z = []
    for line in fig:
        data = line.split()
        y.append((float(data[1])))
        z.append((float(data[2])))
ax.plot_wireframe(x, y, z, rstride=100, cstride=100, color='#1F77B4', lw='1.6', antialiased=True)

ax.view_init(30, 30)
ax.set_xlim3d(0, 1)
ax.set_ylim3d(0, 4)
ax.set_zlim3d(-0.10, 0.25)
ax.set_xlabel(r'Voltage $(V)$', family='serif', fontsize=14)
ax.set_ylabel(r'Time $(ps)$', family='serif', fontsize=14)
ax.set_zlabel(r'Current $(nA)$', family='serif', fontsize=14)

plt.xticks([0, 0.2, 0.4, 0.6, 0.8, 1.0], fontsize=12)
plt.yticks([0.0, 0.5, 1.0, 1,5, 2.0, 2.5, 3.0, 3.5, 4.0], fontsize=12)
ax.set_zticks([-0.10,-0.05,0,0.05,0.10,0.15,0.20,0.25])
#ax.set_zticks(np.arange(0,6,1.0))
plt.gca().invert_xaxis()

plt.savefig('GV-Ts001-L.png', dpi=512)
plt.savefig('GV-Ts001-L.eps', dpi=512)
plt.show()

我很好玩哦,不信你玩玩看~
10楼2017-04-11 21:27:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ConAntares 的主题更新
信息提示
请填处理意见