_tkinter.TclError:没有显示名称,也没有 $DISPLAY 环境变量

我正在服务器中运行一个简单的 python 脚本: import matplotlib.pyplot as plt import numpy as np x = np.random.randn(60) y = np.random.randn(60) plt.scatter(x, y, s=20) out_png = 'path/to/store/out_file.png' plt.savefig(out_png, dpi=150) 我尝试使用命令python example.py在安装了 matplotlib 1.5.1 的服务器中,它失败并出现错误: Traceback (most recent call last): File "example.py", line 7, in <module> plt.scatter(x, y, s=20) File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 3241, in scatter ax = gca() File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 928, in gca return gcf().gca(**kwargs) File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 578, in gcf return figure() File "/home/USER/....

“double_scalars 中遇到无效值”警告,可能是 numpy

当我运行代码时,我会收到这些警告,总是以四个为一组,偶尔出现。 Warning: invalid value encountered in double_scalars Warning: invalid value encountered in double_scalars Warning: invalid value encountered in double_scalars Warning: invalid value encountered in double_scalars 这是 Numpy 警告吗?什么是双标量? 我使用 Numpy min(), argmin(), mean() and random.randn() 我也使用 Matplotlib 答案 看起来像是浮点计算错误。numpy.seterr函数来获取有关发生位置的更多信息。 来自: stackoverflow.com

“用户保存:Matplotlib当前正在使用AGG,这是非GUI后端,因此无法显示该数字。”当用pyplot绘制pycharm上的图形时

我正在尝试使用Pyplot绘制一个简单的图,例如: import matplotlib.pyplot as plt plt.plot([1,2,3],[5,7,4]) plt.show() 但是该数字没有出现,我收到以下消息: UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure. 我在几个地方看到必须使用以下命令更改 matplotlib 的配置: import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt 我这样做了,但是然后收到了一条错误消息,因为它找不到一个模块: ModuleNotFoundError: No module named 'tkinter' 然后,我尝试使用pip install tkinter(在虚拟环境内),但没有找到它: Collecting tkinter Could not find a version that satisfies the requirement tkinter (from versions: ) No matching distribution found for tkinter 我还应该提到,我使用虚拟环境在Pycharm社区版IDE上运行了所有这些内容,并且我的操作系统是Linux/Ubuntu 18.04。 I would like to know how I can solve this problem in order to be able to display the graph....

// 在 matplotlib 的 x 轴上中断

描述我想要实现的目标的最佳方式是使用我自己的图像: 现在我在光谱图中有很多死区,特别是在 5200 和 6300 之间。我的问题很简单,我如何添加一个Pretty的小 // 中断,看起来与此类似(图片来自网络): 我在我的绘图中使用这个设置: nullfmt = pyplot.NullFormatter() fig = pyplot.figure(figsize=(16,6)) gridspec_layout1= gridspec.GridSpec(2,1) gridspec_layout1.update(left=0.05, right=0.97, hspace=0, wspace=0.018) pyplot_top = fig.add_subplot(gridspec_layout1[0]) pyplot_bottom = fig.add_subplot(gridspec_layout1[1]) pyplot_top.xaxis.set_major_formatter(nullfmt) 我非常确定它可以通过 gridpsec 实现,但是如果有一个高级教程详细介绍了如何实现这一点,我们将不胜感激。 如果这个问题之前已经在 stackoverflow 上处理过,我也表示歉意,但我已经广泛寻找了正确的程序gridSpec但目前还没有发现什么。 我已经设法去这么远,差不多: 然而,我的断裂线并不像我希望的那么陡峭…我该如何改变它们? 答案 你可以适应matplotlib 示例直接在 x 轴上中断: """ Broken axis example, where the x-axis will have a portion cut out. """ import matplotlib.pylab as plt import numpy as np x = np.linspace(0,10,100) x[75:] = np.linspace(40,42.5,25) y = np....

%20是什么%20%pylab?

我一直看到人们使用%pylab在各种代码snippits中,尤其是ipython。但是,我看不到哪里%pylab在学习python(以及我拥有的其他几本书)中都提到了任何地方,并且不确定这意味着什么。 我确定答案很简单,但是有人能启发我吗? 答案 %pylab 是一个魔术功能 在ipython。 ipython中的魔术功能总是从百分比(%)开始,然后在没有任何空格的情况下由小文本字符串。从本质上讲,ipython魔术的功能定义了对互动工作特别有用的快捷方式,例如,为了让您了解魔术功能如何在Python中起作用,这是我的一些最爱: 查看CWD目录内容: %ls 要使用空名称空间在ipython中运行脚本,请键入空间,然后脚本名称: %run 要执行代码段(尤其是对于多行摘要,通常会导致_indentationErr_抛出): %paste 当。。。的时候*%pylab*魔术功能是在Ipython提示中输入的,它触发了Matplotlib中各种模块的导入。 哪些模块?好吧,那些包含在pylab界面。 很棒的matplotlib绘图库有two独特的接口:一个Pythonic,以及原始的MATLAB样界面,旨在在交互提示下绘制。 前者通常会像这样进口: from matplotlib import pyplot as PLT 确实,Pyplot有自己的魔术Python魔术功能 %pyplot 为什么要两个不同的接口?Matplotlib的原始接口是Pylab。后来才添加了Pythonic界面。项目开始时,脚本和应用程序开发不是Matplotlib的主要用途,而是在Python Shell中绘制的。 显然约翰·亨特(John Hunter)(Matplotlib的创作者)希望在Python中包括互动绘图,因此他向Fernando Perez(FP)Ipython项目提交了补丁。FP当时是博士学位的学生,并告知JH他将无法审查一段时间。结果,JH创建了matplotlib。意义在于,Matplotlib以基于壳的绘图方案开始。 Pylab界面确实更适合互动工作: from pylab import * x, y = arange(10), cos(x/2) plot(x, y) show() 并使用Pyplot接口: from matplotlib import pyplot as PLT import numpy as NP x, y = NP.arange(10), NP.cos(x/2) fig = PLT.figure() ax1 = fig.add_subplot(111) ax1.plot(x, y) PLT.show() 来自: stackoverflow.com

2D阵列matplotlib的配色图

因此,我认为这真的很简单,但是在一个可理解的示例中,我一直很难找到自己想要的东西。 基本上,我想制作相图,因此,假设我有一个2D阵列,那么我如何才能让matplotlib将其转换为可以将标题,轴和传说(颜色棒)连接到的绘图。 我正在寻找一种非常简单的裸骨解决方案,该解决方案仅使用所需的内容,这些骨骼可以与任何2D阵列一起使用。 我敢肯定这很简单,而且我只是以某种方式很厚,但是我确实遇到了很多麻烦。 我一直在用这些示例进行工具,但是它们似乎并不适合我要做的事情:我喜欢这张图的一般外观,我只是想能够通过2Darray并拥有这个相同的结果: import numpy as np import matplotlib as ml import matplotlib.pyplot as plt H = [[1,2,3,4][5,6,7,8][9,10,11,12][13,14,15,16]] fig = plt.figure(figsize=(6, 3.2)) ax = fig.add_subplot(111) ax.set_title('colorMap') X,Y = np.meshgrid(xedges, yedges) plt.pcolormesh(X, Y, H) ax.set_aspect('equal') cax = fig.add_axes([0.12, 0.1, 0.78, 0.8]) cax.get_xaxis().set_visible(False) cax.get_yaxis().set_visible(False) cax.patch.set_alpha(0) cax.set_frame_on(False) plt.colorbar(orientation='vertical') plt.show() 答案 恐怕您发布的示例不起作用,因为X和Y没有定义。所以而不是pcolormesh让我们使用imshow: import numpy as np import matplotlib.pyplot as plt H = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) # added some commas and array creation code fig = plt....

add_axes 和 add_subplot 之间有什么区别?

在之前的一个回答有人推荐我使用add_subplot代替add_axes正确显示轴,但搜索文档我无法理解何时以及为何应该使用这些函数之一。 谁能解释一下这些差异吗? 答案 共同点 两个都,add_axes和add_subplot向图形添加轴。matplotlib.axes.Axes目的。 然而,用于添加轴的机制有很大不同。 add_axes 的呼叫签名add_axes是add_axes(rect), 在哪里rect是一个列表[x0, y0, width, height]表示图中新轴的左下点坐标(x0,y0)及其宽度和高度。 fig = plt.figure() ax = fig.add_axes([0,0,1,1]) 在画布中放置一个与画布本身一样大的图形。 add_subplot 的呼叫签名add_subplot不直接提供将轴放置在预定义位置的选项。 fig = plt.figure() ax = fig.add_subplot(231) 在此示例中,在第一个位置 (1)在 2 行 3 列的网格上。add_subplot(111)将使用(1 x 1 子图网格上的第一个图)。 add_subplot()没有任何参数也是可能的。) 这种方法的优点是 matplotlib 负责精确定位。add_subplot(111)会产生一个位于[0.125,0.11,0.775,0.77]或类似的,它已经在轴周围为标题和(勾号)标签留下了足够的空间。pyplot.subplots_adjust(...)或者pyplot.tight_layout()。 在多数情况下,add_subplot将是在画布上创建绘图轴的首选方法。add_axes可能有用。 例子 import matplotlib.pyplot as plt plt.rcParams["figure.figsize"] = (5,3) fig = plt.figure() fig.add_subplot(241) fig.add_subplot(242) ax = fig.add_subplot(223) ax.set_title("subplots") fig.add_axes([0.77,.3,.2,.6]) ax2 =fig.add_axes([0.67,.5,.2,.3]) fig.add_axes([0.6,.1,.35,.3]) ax2.set_title("random axes") plt.tight_layout() plt.show() 选择 获取一个或多个子图及其句柄的最简单方法是plt.subplots()。 fig, ax = plt....

attributeError:“图”对象没有属性'绘图'

我的代码 import matplotlib.pyplot as plt plt.style.use("ggplot") import numpy as np from mtspec import mtspec from mtspec.util import _load_mtdata data = np.loadtxt('262_V01_C00_R000_TEx_BL_4096H.dat') spec,freq,jackknife,f_statistics,degrees_of_f = mtspec(data=data, delta= 4930.0, time_bandwidth=4 ,number_of_tapers=5, nfft= 4194304, statistics=True) fig = plt.figure() ax2 = fig ax2.plot(freq, spec, color='black') ax2.fill_between(freq, jackknife[:, 0], jackknife[:, 1],color="red", alpha=0.3) ax2.set_xlim(freq[0], freq[-1]) ax2.set_ylim(0.1E1, 1E5) ax2.set_xlabel("Frequency $") ax2.set_ylabel("Power Spectral Density $)") plt.tight_layout() plt.show() 问题在于我的代码的绘图部分。我应该更改什么?我在Ubuntu上使用Python 2.7。 答案 您分配ax2到figure没有一个的对象plot定义的方法。您想使用plt.axes反而 ax2 = plt.axes() # Instead of ax2 = fig 来自: stackoverflow....

attributeError:模块“ matplotlib.pyplot”没有属性'xlable'

import matplotlib.pyplot as plt squares = [1,4,9,16,25] plt.plot(squares,linewidth=5) plt.title('Square Number',fontsize=24) plt.xlable('Value',fontsize=14) plt.ylable('Square of Value',fontsize=14) plt.tick_params(axis='both',lablesize=14) plt.show() 是因为问题的版本吗? 答案 您可以这样尝试: import matplotlib.pyplot as plt squares = [1,4,9,16,25] plt.plot(squares,linewidth=5) plt.title('Square Number',fontsize=24) plt.xlabel('Value',fontsize=14) plt.ylabel('Square of Value',fontsize=14) plt.tick_params(axis='both',labelsize=14) plt.show() 您的问题是并且应该更改为 xlable->xlabel,,,, ylable - >ylabel,,,, lablesize - >labelsize,拼写label正确的。 来自: stackoverflow.com

ConversionError:无法将值转换为轴单位

我有一个数据框dd包含 84 行和 3 列。 现在我想用它绘制面积图,并将其索引用作 xticks,因此我执行以下操作: dd.plot(kind='area') plt.show() 但我得到了这个结果: (P.S.我没有足够的声誉来发布图片,所以我把这个链接放在这里。) 事实证明,有些xticks被自动隐藏了:应该有84个xticks,但只显示了其中9个(似乎是自动隐藏的)。 我发现了一个类似的问题这里,但是当我尝试链接中提到的方法时,我得到了CnoversionError: ConversionError: Failed to convert value(s) to axis units: Index(['!', '"', '#', '$', '%', '&', ''', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't'], dtype='object') 我注意到我的问题和上面的链接之间的区别是我的 DataFrame 的索引有一个 dtypeobject(它们是字符串),我发现如果我将索引更改为 int 列表,错误就会消失。...

cv2的论点:: imshow

Edit: original title “convert numpy array to cvmat” was a mistake - OpenCV’s less than useful error message and my not reading the docs! 和OPENCV2,,Python现在默认使用Numpy数组。 cvimage = cv2.imread("image.png") #using OpenCV 2 type(cvimage) Out: numpy.ndarray #dtype is uint8 pltimage = plt.imread("image.png") #using Matplotlib type(pltimage) Out: numpy.ndarray #dtype is float plt.imshow(cvimage) # works great cv2.imshow(cvimage) TypeError: Required argument 'mat' (pos 2) not found 自从cv2默认使用numpy数组,不再有任何CV :: MAT构造器,而Numpy没有函数可以转换为cv::Mat大批。 有任何想法吗? 答案 该功能具有以下DocString:imshow(winname, mat) -> None。您可以通过键入查看DOC字符串cv2.imshow.__doc__在口译员中。...

DPI和人物大小之间的关系

我已经使用matplotlib创建了一个数字,但是我已经意识到了绘图轴,并且绘制线被缩放。 阅读此较早的讨论线程,它说明了如何设置数字大小。 fig, ax = plt.subplots() fig.set_size_inches(3, 1.5) plt.savefig(file.jpeg, edgecolor='black', dpi=400, facecolor='black', transparent=True) 使用上述代码(其他配置为简短删除),我确实获得了一个由此产生的图像文件1200 X 600所需的尺寸(我们也应该说解决方案吗?)和所需的文件大小。 投影的图像以不寻常的方式缩放,例如,注释会放大。虽然我可以将标签的大小设置在轴上的大小,但由于底部和右刺很大,因此图看起来不成比例,因此绘制的线条也很大。 因此,问题是,哪些配置出了什么问题? 答案 Figure size ((figsize)确定图形的大小为英寸。这给出了图内轴(和其他元素)具有的空间。默认图是(6.4, 4.8)Matplotlib 2中的英寸。较大的数字尺寸将允许显示更长的文本,更多的轴或更多滴答标签。 Dots per inches (dpi) 确定该图包含多少像素。matplotlib中的默认DPI为100。figsize=(w,h)会有 px, py = w*dpi, h*dpi # pixels # e.g. # 6.4 inches * 100 dpi = 640 pixels 因此,为了获得一个像素大小的图形。(1200,600)您可能会选择多种图形和DPI的组合,例如 figsize=(15,7.5), dpi= 80 figsize=(12,6) , dpi=100 figsize=( 8,4) , dpi=150 figsize=( 6,3) , dpi=200 etc. 现在,有什么区别?这取决于图内元素的大小。大多数元素(如行,标记,文本)中的大小为点。 matplotlib数字使用**Points per inch (ppi)**72.厚度1分的线将为1./72。英寸宽。字体大小12点的文字为12./72。英寸高。 当然,如果您以英寸为单位更改数字的大小,则点不会改变,因此更大的数字仍然具有相同的元素大小。Changing the figure size is thus like taking a piece of paper of a different size....

ImportError: DLL 加载失败: 找不到指定的模块

我已经安装了Python 2.5.4、Numpy 1.5.0 win32、Matplotlib 1.0.0 win32、pywin32 218。仍然无法在Python中绘制图表。 import pylab File "C:\Python25\lib\site-packages\pylab.py", line 1, in <module> from matplotlib.pylab import * File "C:\Python25\lib\site-packages\matplotlib\pylab.py", line 216, in <module> from matplotlib import mpl # pulls in most modules File "C:\Python25\lib\site-packages\matplotlib\mpl.py", line 1, in <module> from matplotlib import artist File "C:\Python25\lib\site-packages\matplotlib\artist.py", line 6, in <module> from transforms import Bbox, IdentityTransform, TransformedBbox, TransformedPath File "C:\Python25\lib\site-packages\matplotlib\transforms.py", line 34, in <module> from matplotlib._path import affine_transform ImportError: DLL load failed: The specified module could not be found....

imshow:范围和方面

我正在编写一个软件系统,该软件系统通过3D数据集可视化切片和预测。我在用着matplotlib特别是imshow为了可视化图像缓冲区,我从分析代码中返回。 由于我想用绘图轴注释图像,因此我使用了范围关键字imshow供应将图像缓冲像素坐标映射到数据空间坐标系。 很遗憾,matplotlib不知道单位。说(以人为的例子为例)我想绘制一个具有尺寸的图像1000 m X 1 km。在这种情况下,程度将是类似的[0, 1000, 0, 1]。即使图像阵列为正方形,由于关键字所隐含的纵横比为1000,因此所得的绘图轴也具有1000的纵横比。 是否可以使用范围关键字来强制迫使图的纵横比,同时保持自动生成的主要刻度标记和标签? 答案 您可以通过手动设置图像的方面(或让其自动尺度填充图的范围)来做到这一点。 默认情况下,imshow将情节的方面设置为1,因为这通常是人们想要的图像数据。 就您而言,您可以做类似的事情: import matplotlib.pyplot as plt import numpy as np grid = np.random.random((10,10)) fig, (ax1, ax2, ax3) = plt.subplots(nrows=3, figsize=(6,10)) ax1.imshow(grid, extent=[0,100,0,1]) ax1.set_title('Default') ax2.imshow(grid, extent=[0,100,0,1], aspect='auto') ax2.set_title('Auto-scaled Aspect') ax3.imshow(grid, extent=[0,100,0,1], aspect=100) ax3.set_title('Manually Set Aspect') plt.tight_layout() plt.show() 来自: stackoverflow.com

Imshow()的图太小

我正在尝试使用IMShow()可视化一个数组,因为它类似于MATLAB中的Imagesc()。 imshow(random.rand(8, 90), interpolation='nearest') 最终的图在灰色窗口的中心非常小,而大部分空间则没有占用。如何设置参数以使图更大?我尝试了无花果=(xx,xx),这不是我想要的。谢谢! 答案 如果你不给aspect争论imshow,它将使用该值image.aspect在你的matplotlibrc。新值的默认值matplotlibrc是equal。所以imshow将以相等的纵横比绘制您的数组。 如果您不需要平等的方面,则可以设置aspect到auto imshow(random.rand(8, 90), interpolation='nearest', aspect='auto') 给出以下数字 如果您想要相等的纵横比,则必须适应您的figsize根据方面 fig, ax = subplots(figsize=(18, 2)) ax.imshow(random.rand(8, 90), interpolation='nearest') tight_layout() 给你的: 来自: stackoverflow.com