我已经在这里发布了相当数量的代码,它在这篇文章的底部。这段代码打开了一个tkinter图形用户界面,其中包含各种按钮和字段等。它还使用matplotlib在最底部显示一个图形。我知道这不是最好的图书馆使用,但我不知道其他人如何与tkinter工作。所以我最好暂时坚持使用matplotlib。

对于图表,我希望每个数据点都是从[x,y]坐标到[x,0]的垂直线。很明显的答案是使用条形图,条形图的宽度为1,我试过了,但是绘制速度比散点图慢得多。

我一直想弄清楚的是,是否可以使用这里使用的散点图方法,垂直线绘制为y=0。这可能吗?

或者我应该放弃使用matplotlib和pandas或PyQtGraph的尝试。如果是这样的话,有没有教程来说明这是如何做到的?我试过找一些,但没有运气。

任何帮助都将不胜感激。我正在使用python 3.3的pyzo包。

import numpy

from decimal import *

import tkinter as tk

import numpy as np

from tkinter import *

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

from matplotlib.figure import Figure

from tkinter import ttk

import tkinter.scrolledtext as tkst

import spectrum_plot_2 as specplot

import sequencer as seq

class Plot:

def __init__(self, master, data):

self.x = np.array(data.spectrum[0])

self.y = np.array(data.spectrum[1])

# Create a container

self.frame = tk.Frame(master)

self.fig = Figure()

self.ax = self.fig.add_subplot(111)

self.line = self.ax.plot(self.x, self.y, '|')

self.canvas = FigureCanvasTkAgg(self.fig,master=master)

# self.canvas.show()

self.canvas.get_tk_widget().pack(side='top', fill='both', expand=1)

self.frame.pack()

def update(self, data):

"""Updates the plot with new data"""

self.x = np.array(data.spectrum[0])

self.y = np.array(data.spectrum[1])

self.line[0].set_xdata(self.x)

self.line[0].set_ydata(self.y)

self.canvas.show()

self.frame.pack()

class Spectrum:

"""(Spectrum, String, Decimal, int) -> None

Import a spectrum from a text file

"""

def __init__(self, file, precision = 4, charge_state = None, sensetivity = 50, name='Unknown'):

self.precision = precision

self.name = name

self.file = file

self.charge_state = charge_state

self.spectrum = self.load_spec(file, precision)

def load_spec(self, file, precision):

"""(Spectrum, String) -> list

manipulate spectrum file and return a list of lists:

list[0] = [mz]

list[1] = [intensity]

"""

raw_spectrum = numpy.loadtxt(file)

# assign the spectrum to a dictionary

intensity = ['%.0f' % elem for elem in raw_spectrum[:,1]]

mz = ['%.4f' % elem for elem in raw_spectrum[:,0]]

spectrum = [mz, intensity]

for i in spectrum:

for j, elem in enumerate(i):

i[j] = round(Decimal(elem), precision)

j = 0

return [mz, intensity]

class View(ttk.Frame):

"""Main GUI class"""

def __init__(self, master = None):

self.WIDTH = 450

self.HEIGHT = 500

self.spectrum = seq.Spectrum(r'C:\MyPyProgs\Sequencer\data\s1c4b1.txt')

self.spectra = {}

self.spectra_names = []

self.filenames = []

###############################

### User editable variables ###

self.precision = IntVar(value=4, name='precision')

self.sensitivity = IntVar(value = 50, name='sensitivity')

### User editable variables ###

###############################

# Set up the main window

ttk.Frame.__init__(self, master, borderwidth=5, width=self.WIDTH, height=self.WIDTH)

self.master.resizable(FALSE, FALSE)

self.grid(column=0, row=0, sticky=(N, S, E, W))

self.columnconfigure(0, weight=1)

# Create the upper control frame

self.control_frame = ttk.Frame(self, width=self.WIDTH // 2, height=300, relief='sunken')

self.control_label = ttk.Label(self.control_frame, text="Controls", font='arial', justify='center')

# Precision controls definitions

self.precision_label = ttk.Label(self.control_frame, text="Precision: ")

self.precision_entry = ttk.Entry(self.control_frame, textvariable=self.precision)

self.precision_help_button = ttk.Button(self.control_frame, text="Help")

# Sensitivity controls definitions

self.sensitivity_label = ttk.Label(self.control_frame, text="Sensitivity")

self.sensitivity_entry = ttk.Entry(self.control_frame, textvariable=self.sensitivity)

self.sensitivity_reload = ttk.Button(self.control_frame, text="Reload")

self.sensitivity_help_button = ttk.Button(self.control_frame, text="Help")

self.analyse_known_button = ttk.Button(self.control_frame, text="Analyse From Known")

self.control_frame.grid(row=0, column=1, sticky=(N, E, S))

self.control_label.grid(column=0, row=0, columnspan=4, sticky=(N), pady=5, padx=self.WIDTH // 5)

### Grid layouts ###

# Precision controls grid

self.precision_label.grid(column=0, row=1, padx=2)

self.precision_entry.grid(column=1, row=1, padx=2)

self.precision_help_button.grid(column=3, row=1, padx=2)

# Sensitivity controls grid

self.sensitivity_label.grid(column=0, row=2, padx=2)

self.sensitivity_entry.grid(column=1, row=2, padx=2)

self.sensitivity_reload.grid(column=2, row=2, padx=2)

self.sensitivity_help_button.grid(column=3, row=2, padx=2)

self.analyse_known_button.grid(column=1, row=3, columnspan=2)

### Output frame using ScrolledText ###

self.output_frame = ttk.Frame(self, relief='sunken')

self.output_frame.grid(row=0, column=0)

self.output = tkst.ScrolledText(self.output_frame, width=45, height=20, wrap=WORD)

self.output.grid(row=0, column=0, sticky=(N, S, E, W))

self.output.see(END)

self.output.insert(END, "Welcome, before you start make sure that the backbone and sugar structures are correct. To analyse your spectra follow the steps below: \n 1. Type the known sequence into the text box from 5' to 3' and click assign. \n 2. Load your spectra in order of charge, File -> Open Spectra... . \n 3. Finally click the Analyse From Known button. \n")

self.output['state']='disabled'

### Creates a sunken frame to get the sequence and choose loaded spectra ###

self.input_frame = ttk.Frame(self, relief='sunken', borderwidth=5, width=self.winfo_width())

self.input_frame.grid(row=1, column=0, columnspan=2, sticky=(E, W))

self.spec_label = ttk.Label(self.input_frame, text="Spectrum:")

self.selected_spec = StringVar()

self.spec_select = ttk.Combobox(self.input_frame, values=self.spectra_names)

self.spec_label.grid(row=0, column=6, padx=10)

self.spec_select.grid(row=0, column=7)

seq_entry_label = ttk.Label(self.input_frame, text="Sequence: ")

label_5p = ttk.Label(self.input_frame, text="5'-")

self.sequence_entry = ttk.Entry(self.input_frame, width=40)

label_3p = ttk.Label(self.input_frame, text="-3'")

assign_seq = ttk.Button(self.input_frame, text="Calculate", command=lambda : self.assign(self.sequence_entry))

seq_entry_label.grid(row=0, column=0)

label_5p.grid(row=0, column=1)

self.sequence_entry.grid(row=0, column=2)

label_3p.grid(row=0, column=3)

assign_seq.grid(row=0, column=4)

### Creates a sunken frame to plot the current spectrum ###

self.spec_frame = ttk.Frame(self, relief='sunken', borderwidth=1, width=self.winfo_width(), height=250)

self.spec_frame.grid(row=2, column=0, columnspan=2, sticky=(S, E, W))

self.plot = specplot.Plot(self.spec_frame, self.spectrum)

precision = 4

charge = -1

file = r'C:\MyPyProgs\sequencer\data\s1c4b1.txt'

spectrum = Spectrum(file, precision, charge)

if __name__ == "__main__":

root = Tk()

root.title("Sequencer_help")

view = View(root)

root.mainloop()

print("End")

python绘制直线的垂线_Matplotlib:散点图中的垂直线相关推荐

  1. python绘制直线的垂线_p countour中的Python垂直线

    在二维绘图中,我通常使用 l, = pylab.plot([10, 10], [-1000,1000], color="g", lw=0.5) 在x位置10在垂直轴上绘制范围从-1 ...

  2. python绘制训练结果曲线图和散点图、解决坐标刻度标签重复问题 、利用训练标准输出流绘制

    python绘制训练结果曲线图和散点图.解决坐标刻度标签重复问题 .利用训练标准输出流绘制 python绘制训练结果图 训练结果标准输出流 删除标准输出流中多余内容 正则表达式提取数据 绘制曲线图和散 ...

  3. R语言使用scatterplot3d包的scatterplot3d函数可视化3D散点图(3D scatter plots)、在3D散点图中添加垂直线和数据点描影、3D图中添加回归平面

    R语言使用scatterplot3d包的scatterplot3d函数可视化3D散点图(3D scatter plots).在3D散点图中添加垂直线和数据点描影.3D图中添加回归平面(overlaid ...

  4. python绘制三维地形shade()参数_python中的Matplot库和Gdal库绘制富士山三维地形图-参考了虾神的喜马拉雅山...

    首先请大家读一下面这篇文章了解什么是Gdal http://blog.csdn.net/grllery/article/details/77822595 剩下的我要公布绘制富士山的代码了,虽然基本co ...

  5. python绘制缓和曲线_在cad中画缓和曲线的绘制方法

    缓和曲线具有以下作用:曲率连续变化,便于车辆遵循:离心加速度逐渐变化,旅客感觉舒适:超高横坡度及加宽逐渐变化,行车更加稳定:与圆曲线配合,增加线形美观.故,缓和曲线在公路.桥梁.铁路及高速铁路中广泛采 ...

  6. 用python绘制熊猫图案_在matplotlib中绘制熊猫日期

    我有一个固定宽度的数据文件,其中包含日期,但当我试图绘制数据时,日期没有正确地显示在x轴上. 我的文件看起来像2014-07-10 11:49:14.377102 45 2014-07-10 11:5 ...

  7. python绘制时间轴_python – matplotlib图中的链接时间轴(x轴)

    这是基于生成第二个x轴,如上一篇文章所述: 下面是生成具有两个x轴的图的代码,该图表示相同数据的两个不同时间单位:相对时间(rel_time)和绝对时间(abs_time).虽然上述方法很好地生成了两 ...

  8. python绘制频谱图,在音频分析中绘制频谱图

    I am working on speech recognition using neural network. To do so I need to get the spectrograms of ...

  9. python绘制直方图显示数字_python dataframe中各元素出现次数统计及画直方图

    比如: print(Counter(a[0])) Counter({'sausage': 825, 'whole milk': 717, 'frankfurter': 580, 'tropical f ...

最新文章

  1. var和dynamic的应用 var、动态类型 dynamic 深入浅析C#中的var和dynamic ----demo
  2. 杰和弯道超车 推企业级NAS存储应用方案
  3. 一键 linux桌面安装vnc,Ubuntu 16.04 LTS一键安装VNC
  4. Halcon例程详解(植物测量) —— measure_plant.hdev
  5. hook java android_Android Hook Java的的一個改進版本
  6. java 中 image 和 byte[] 相互转换
  7. java 抛异常 jvm_邪恶的Java技巧使JVM忘记检查异常
  8. vaadin_5分钟内Google App Engine上的Vaadin App
  9. LeetCode 1014. 最佳观光组合
  10. 1005. 继续(3n+1)猜想 (25) PAT乙级真题
  11. 图形学中画正方形的几种方式
  12. 地址转换函数(点分十进制与网络字节序的二进制)
  13. 主观赋权法(AHP)和客观赋权法(熵值法)组合权重法
  14. 国内免费的mqtt测试服务器或者mqtt broker
  15. java jsf_JSF简单入门
  16. Mybatis —— @Options注解实现执行参数配置
  17. 编写一程序,输入月份号,输出该月的英文月名。例如,输入3,则输出“March“,要求用指针数值处理。
  18. Android进度条样式问号,DLNA上线后,粉粉们是否有许多问号,相信这篇帖子可以帮大家解决...
  19. 债券逆回购 上海深圳市场 操作指南
  20. 详解Citrix思杰XenServer虚拟化

热门文章

  1. 8.HTML标签-表格标签table
  2. 笔记本外接显示屏调节亮度
  3. 项目依赖aar 以及 依赖嵌套aar
  4. ZIP压缩包下载总结
  5. linux vi打不开文件,在Linux中使用vi/vim打开一个文件时出现的的问题
  6. 创建一个IntelliJ Idea文件模板,将光标放在文件中的特定位置
  7. [Win10] [C# Desktop] 两种方法发送原生Toast通知
  8. xcpc近年铜牌题补题路
  9. 无房产证明怎么办理?
  10. 第四周 放大电路的分析