天道酬勤,学无止境

如何使用 Plots.jl 在图像上绘图?(How plot on Images with Plots.jl?)

问题

我想使用 Plots.jl 绘制图像,例如简单的正弦曲线。 这是我的代码:

using Plots
using Images
gr()
h = 400
w = 600
a = Array(RGB{FixedPointNumbers.UFixed{UInt8,8}}, h, w)
img = Image(a)
p=plot(img)
x = collect(0:0.1:2π)
plot!(x,sin(x))
png("Test")

但我得到错误的结果。 如何正确地做到这一点?

回答1

这是一个简单的例子,我希望能给你一些线索:

julia> plot(img)

julia> plot!(x->200sin(.05x)+300, 0, 700, w=5)

您可能只想确保绘制到与图像匹配的正确坐标。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • How plot on Images with Plots.jl?
    I want using Plots.jl for plot on Images, for example simple sinusoid. Here my code: using Plots using Images gr() h = 400 w = 600 a = Array(RGB{FixedPointNumbers.UFixed{UInt8,8}}, h, w) img = Image(a) p=plot(img) x = collect(0:0.1:2π) plot!(x,sin(x)) png("Test") But I get wrong result. How do this correctly?
  • How to scale the fontsizes using Plots.jl
    is there a way to rescale all the fontsizes (legend, tickslabels, axislabels…) at once? Original question from Filippo Vicentini on Slack.
  • Julia PyPlot:绘制 3D 表面,将表面颜色作为表面梯度的范数(Julia PyPlot: plot 3D surface with as face colors the norm of surface gradient)
    问题 有谁知道如何使用 Julia 的 Pyplot 绘制 3D 表面,例如将表面梯度的范数作为面部颜色? 类似于 Python 的这个主题:Color matplotlib plot_surface command with surface gradient 回答1 我看到了这个,我只需要让它工作。 使用 PyPlot 后端,它几乎被 Plots.jl 支持开箱即用。 我只需要换一个自定义 matplotlib 着色器来应用不同的 z 矩阵。 您会注意到我正在访问 numpy 的梯度函数(通过PyCall导入),并且我正在包装梯度矩阵G以便它不会被分成列。 总而言之......比python示例简单得多! using Plots; pyplot(); x = y = LinRange(-5.0, 5.0, 30) z = sin(sqrt(Float64[xi^2+yi^2 for xi = x, yi = y])) surface(x, y, z, alpha = 0.7) using PyCall Gx, Gy = Plots.pynb.pymember(:gradient)(z) surface(x, y, z, alpha = 0.8, zcolor = wrap(G))
  • 如何在 R 中保存绘图图像?(How do I save plot images in R?)
    问题 我从一个非常大的向量(大小为 10^7)创建了一个图。 将绘图保存为 pdf 文件的通常方法的问题在于,pdf 文件是一个大约 10MB 的非常大的文件。 对于简单的时间序列图,我不想要这么大的尺寸。 如何保存图以使大小小到最多 100 KB? 回答1 baptiste 是在正确的轨道上,他们建议使用 png 来制作一个漂亮的光栅类型图。 相对于Jdbaba的建议复制打开的设备,我建议你直接调用png()设备。 这将节省大量时间,因为您不必先在单独的设备窗口中加载绘图,如果数据集很大,加载可能需要很长时间。 例子 #plotting of 1e+06 points x <- rnorm(1000000) y <- rnorm(1000000) png("myplot.png", width=4, height=4, units="in", res=300) par(mar=c(4,4,1,1)) plot(x,y,col=rgb(0,0,0,0.03), pch=".", cex=2) dev.off() #only 129kb in size 有关 png 设备的其他设置,请参阅?png 。 回答2 如果要绘制 png 文件,请使用以下命令: dev.copy(png,"myfile.png",width=8,height=6,units="in",res=100) dev
  • 如何在绘图中使用自定义png图像标记?(How to use custom png image marker with plot?)
    问题 我想在散点图和折线图中使用客户标记。 如何从PNG文件中制作自定义标记? 回答1 我不相信matplotlib可以自定义这样的标记。 有关自定义级别的信息,请参见此处。 作为替代方案,我编写了此混合代码,该混合代码使用figimage将图像放置在线点位置。 import matplotlib.pyplot as plt import matplotlib.image as image # constant dpi = 72 # read in our png file im = image.imread('smile.png') image_size = im.shape[1], im.shape[0] fig = plt.figure(dpi=dpi) ax = fig.add_subplot(111) # plot our line with transparent markers, and markersize the size of our image line, = ax.plot((1,2,3,4),(1,2,3,4),"bo",mfc="None",mec="None",markersize=imageSize[0] * (dpi/ 96)) # we need to make the frame transparent so the image can be
  • Coding and Paper Letter(八十)
    新一期资源整理。 文章目录 1 Coding:2 Paper: 1 Coding: 1.城市模拟综合。 UrbanSimulationSynthesis 2.基于 bookdown 的 ElegantBook。 ElegantBookdown 3.R语言包lifecycle,生命周期提供了一组工具和约定来管理导出功能的生命周期。 lifecycle 4.学习GitHub注册的基础知识,进行首次回购,上传文档/文件,分支,合并和拉取请求均在.ppt文档中进行了讨论 lunch and learn GitHub Basics ppt 5.这是MSU的PLP 847小组项目,由Greg Bonito教授。团队成员包括:Melini Jayawardana Austin McCoy Mitch Roth丽贝卡·谢伊。 TarSpot of Corn 6.弯嘴滨鹬和红颈滨鹬的迁徙方式和后果。 CurlewSands RedNStints 7.R语言包varstan,Varstan是一个使用哈密顿蒙特卡洛方法对结构化时间序列模型进行贝叶斯估计的软件包,该方法由Stan(一种C ++的概率语言模型)实现。 varstan 8.这是一个客户端库,可用于检测Python应用程序的分布式跟踪收集,并将这些跟踪发送到Jaeger。有关更多详细信息,请参见OpenTracing Python API。
  • 如何从Matplotlib中的图检索颜色条实例(How to retrieve colorbar instance from figure in matplotlib)
    问题 全部。 我想在更改图像数据时更新图形的颜色栏。 所以像这样: img = misc.lena() fig = plt.figure() ax = plt.imshow(im) plt.colorbar(ax) newimg = img+10*np.randn(512,512) def update_colorbar(fig,ax,newimg): cbar = fig.axes[1] ax.set_data(newimg) cbar.update_normal(ax) plt.draw() 但似乎从fig.axes()返回的结果不像我期望的那样具有colorbar实例。 我可能可以只将colorbar实例作为参数传递给update函数,但是我认为仅传递一个fig参数就足够了。 谁能解释一下如何从图中检索颜色条? 还是为什么'fig.axes()'不返回AxesImage或Colobar实例,而仅返回Axes或AxesSubplot? 我想我只需要对Axes / Figure东西有更多的了解,谢谢! 回答1 首先,我认为您在坐标轴(基本上是绘图),图形,标量可映射对象(在这种情况下为图像)和色条实例之间有点困惑。 该figure是绘图所在的窗口。它是顶层容器。 每个图形通常具有一个或多个axes 。 这些是地块/子图。 彩条也在图中。 添加颜色条会为要显示的颜色条创建一个新轴
  • 如何将绘图作为图像保存在磁盘上?(How to save a plot as image on the disk?)
    问题 我使用R绘制了一个简单的线性回归。我想将该图像另存为PNG或JPEG,是否可以自动执行? (通过代码) 有两个不同的问题:首先,我已经在监视器上查看该图了,我想按原样保存它。 其次,我还没有生成绘图,但是我想在执行绘图代码时将其直接保存到磁盘。 回答1 有两个密切相关的问题,每个问题都有一个答案。 1.将来会在脚本中生成映像,如何将其保存到磁盘? 要保存图解,您需要执行以下操作: 使用png() , bmp() , pdf()或类似名称打开设备绘制模型使用dev.off()关闭设备 用于将绘图保存到png文件的一些示例代码: fit <- lm(some ~ model) png(filename="your/file/location/name.png") plot(fit) dev.off() 这在(组合)帮助页面中针对图形格式?png , ?bmp , ?jpeg和?tiff描述,以及在?pdf的单独帮助页面中进行了描述。 但是请注意,与直接绘制到屏幕上的同一图一样,该图像在磁盘上看起来可能会有所不同,例如,如果您调整了屏幕上窗口的大小。 请注意,如果您的图是由lattice或ggplot2 ,则必须显式打印该图。 请参阅此答案,以更详细地说明此问题,并且还链接到R常见问题解答:ggplot的qplot在采购时不执行 2.我目前正在查看屏幕上的绘图
  • R - 如何为复杂的 ggplot 图像分配屏幕空间(R - how to allocate screen space to complex ggplot images)
    问题 我正在尝试编写一个脚本,在单个图像中生成四个不同的图。 具体来说,我想尽可能地重新创建这个图形: 我当前的脚本生成了四个与这些类似的图,但我无法弄清楚如何相应地分配屏幕空间。 我想要: 修改地块的高度和宽度,使所有四个都具有统一的宽度,一个比其中一个高度相同的其他高得多通过坐标定义图例的位置,以便我可以有效地使用屏幕空间根据需要明确修改我的图像的整体形状(也许我会在某个时候需要它更接近方形) 生成一些数据来绘制 pt_id = c(1:279) # DEFINE PATIENT IDs smoke = rbinom(279,1,0.5) # DEFINE SMOKING STATUS hpv = rbinom(279,1,0.3) # DEFINE HPV STATUS data = data.frame(pt_id, smoke, hpv) # PRODUCE DATA FRAME 添加解剖部位数据 data$site = sample(1:4, 279, replace = T) data$site[data$site == 1] = "Hypopharynx" data$site[data$site == 2] = "Larynx" data$site[data$site == 3] = "Oral Cavity" data$site[data$site == 4] =
  • 使用imshow或其他功能在matplotlib中创建相交图像(Creating intersecting images in matplotlib with imshow or other function)
    问题 我有两个3D探地雷达数据阵列。 每个阵列基本上都是延时二维图像的集合,其中时间沿三维方向增加。 我想创建一个3D图,该图与每个数组的2D图像相交。 我实质上是在尝试创建围栏图。 在以下网站上可以找到此类绘图的一些示例:http://www.geogiga.com/images/products/seismapper_3d_seismic_color.gif http://www.usna.edu/Users/oceano/pguth/website/so461web/ nuclear_refl / fence.png 我通常使用imshow单独显示2-D图像以进行分析。 但是,我对imshow功能的研究表明它不适用于3D轴。 有什么办法解决吗? 还是有另一个可以复制显示功能但可以与3D轴组合的绘图功能? 回答1 如果您乐于考虑使用其他绘图库(即非matplotlib),那么可能值得考虑mayavi / tvtk(尽管学习曲线有些陡峭)。 我所看到的与您想要的最接近的是http://wiki.scipy.org/Cookbook/MayaVi/Examples中的标量切割平面 文档的大部分位于:http://docs.enthought.com/mayavi/mayavi/index.html 回答2 也许有更好的方法,但是至少您总是可以制作一个平面网格并为其着色:
  • Keras TensorFlow教程:使用自己的数据集进行训练
    大多数Keras教程都尝试使用图像分类数据集(如MNIST(手写识别)或基本对象CIFAR-10(基本对象识别))来开启Keras库的基础知识学习。 这篇文章将对Keras入门教程进行不同的尝试。使用自定义数据集训练第一个神经网络和卷积神经网络——将深度学习应用您自己的数据集,而不是Keras内置的数据集。 使用Keras训练您的第一个简单神经网络不需要很多代码,但是我们将逐步开始,逐步进行,以确保您了解如何在自己的自定义数据集上训练网络的过程。 今天介绍的步骤包括: 1. 安装Keras和其依赖库 2. 从磁盘加载数据 3. 训练和测试数据分组 4. 定义模型 5. 编译模型 6. 训练模型 7. 评估模型 8. 使用训练的模型进行预测 这看起来似乎需要很多步骤,但是我向您保证,一旦我们开始使用示例,您将看到示例是线性的、直观的,并且将帮助您了解使用Keras训练神经网络的基础知识。 实质上,使用MINST或者CIFARr10训练集相当于只是调用了内置的函数,训练、测试数据分组创建模型等都已预定义好, 当我们尝试使用自己的数据集时,我们可能会抓耳挠腮考虑下边几个问题: 这些辅助函数从何处加载数据?磁盘上的数据集应采用什么格式?如何将数据集加载到内存中?我需要执行哪些预处理步骤? 在此Keras教程中,我们将使用名为“动物数据集”的自定义数据集。 1
  • 如何在Bokeh(Python)中处理图像(How do I work with images in Bokeh (Python))
    问题 例如,您可以使用以下代码在matplotlib中绘制图像: %matplotlib inline import matplotlib.pyplot as plt import matplotlib.image as mpimg img=mpimg.imread('image.png') plt.imshow(img) Bokeh(0.10)可能会发生这种情况吗? 回答1 您可以使用ImageURL字形( image_url plot方法)在本地或从Web加载图像。 from bokeh.plotting import figure, show, output_file output_file('image.html') p = figure(x_range=(0,1), y_range=(0,1)) p.image_url(url=['tree.png'], x=0, y=1, w=0.8, h=0.6) ## could also leave out keywords # p.image_url(['tree.png'], 0, 1, 0.8, h=0.6) show(p) 一个陷阱-如果仅绘制图像(没有其他数据),则必须显式设置绘图范围。 这是文档: http://docs.bokeh.org/en/latest/docs/reference/models/glyphs
  • 将自定义图像放置在绘图窗口中-作为自定义数据标记或注释这些标记(Placing Custom Images in a Plot Window--as custom data markers or to annotate those markers)
    问题 我有一组150x150px png图像,以及它们对应的一组(x,y)坐标。 有没有办法在网格上绘制图像? 例如,我正在寻找一种R或Python解决方案来创建类似以下内容的内容: 回答1 您可以通过实例化AnnotationBbox来创建边界框,一次为每个要显示的图像创建一个边界框。 图像及其坐标将传递给构造函数。 该代码对于这两个图像显然是重复的,因此一旦将该块放入函数中,它的长度就不会像这里看起来的那样长。 import matplotlib.pyplot as PLT from matplotlib.offsetbox import AnnotationBbox, OffsetImage from matplotlib._png import read_png fig = PLT.gcf() fig.clf() ax = PLT.subplot(111) # add a first image arr_hand = read_png('/path/to/this/image.png') imagebox = OffsetImage(arr_hand, zoom=.1) xy = [0.25, 0.45] # coordinates to position this image ab = AnnotationBbox(imagebox, xy, xybox=(30.,
  • 如何针对使用matplotlib的代码编写单元测试?(How can I write unit tests against code that uses matplotlib?)
    问题 我正在研究一个python(2.7)程序,该程序会产生很多不同的matplotlib图(数据不是随机的)。 我愿意实施一些测试(使用unittest)以确保生成的数字正确。 例如,我将预期的图形(数据或图像)存储在某个地方,运行我的函数并将结果与​​参考进行比较。 有没有办法做到这一点 ? 回答1 以我的经验,图像比较测试最终带来的麻烦超过了它们的价值。 如果要跨多个系统(例如TravisCI)运行持续集成,则可能会出现这种情况,这些系统可能具有略有不同的字体或可用的图形后端。 即使功能正常运行,要保持测试通过仍然是很多工作。 此外,以这种方式进行测试需要将图像保留在git存储库中,如果您经常更改代码,这会很快导致存储库膨胀。 我认为,更好的方法是(1)假设matplotlib将正确地正确绘制图形,并且(2)对绘图函数返回的数据进行数值测试。 (如果您知道要查找的位置,也可以始终在Axes对象中找到此数据。) 例如,假设您要测试一个简单的函数,如下所示: import numpy as np import matplotlib.pyplot as plt def plot_square(x, y): y_squared = np.square(y) return plt.plot(x, y_squared) 您的单元测试可能看起来像 def test_plot_square1
  • 如何检查图形上是否存在颜色条(How to check if colorbar exists on figure)
    问题 问题:有没有办法检查色条是否已经存在? 我正在用循环制作很多图。 问题是每次迭代都会绘制颜色条! 如果我可以确定颜色条是否存在,那么我可以将颜色条函数放在 if 语句中。 if cb_exists: # do nothing else: plt.colorbar() #draw the colorbar 如果我使用多处理来制作数字,是否可以防止添加多个颜色条? import numpy as np import matplotlib.pyplot as plt import multiprocessing def plot(number): a = np.random.random([5,5])*number plt.pcolormesh(a) plt.colorbar() plt.savefig('this_'+str(number)) # I want to make a 50 plots some_list = range(0,50) num_proc = 5 p = multiprocessing.Pool(num_proc) temps = p.map(plot, some_list) 我意识到我可以在绘制下一次迭代之前使用 plt.clf() 和 plt.cla() 清除图形。 但是,我的底图图层上有我不想重新绘制的数据(这会增加创建绘图所需的时间)。 所以
  • R 保存图像以创建使用大量点增量生成的绘图动画(R save images to create animation of plot incrementally generated with large number of points)
    问题 我正在尝试根据随着时间的推移逐渐建立的散点图创建动画。 用例是我有一个大约 200 万个点的数据库,每个点都有时间戳,并且想要生成显示特定日期或之前的所有点的帧。 在不保存图像的情况下,我可以通过首先调用plot() ,然后有一个 for 循环来使用points()函数为连续的每一天递增地绘制数据来做到这一点。 当我尝试使用下面的代码保存图像时,出现“尚未调用 plot.new”的错误。 据我了解,需要dev.off()来保存图像,但这也会关闭正在绘制的设备。 有没有办法解决这个问题? 由于数据的大小,必须为每一帧重新绘制数据并不是一个很好的选择。 plot(info$lon, info$lat, xlim=c(0,30), ylim=c(30,60)) for (i in c(1:length(allDates))){ filename=paste(sprintf('%05d', i), ".png", sep="") png(filename=fileName) # (code that gets the data for a particular date via a database query) points(info$lon, info$lat, cex=0.1) dev.off() } 更新: @roman-lustrik 关于ggsave()是我正在寻找的
  • 将绘图保存到图像文件,而不是使用Matplotlib显示它(Save plot to image file instead of displaying it using Matplotlib)
    问题 我正在编写一个快速且肮脏的脚本来动态生成绘图。 我使用下面的代码(来自Matplotlib文档)作为起点: from pylab import figure, axes, pie, title, show # Make a square figure and axes figure(1, figsize=(6, 6)) ax = axes([0.1, 0.1, 0.8, 0.8]) labels = 'Frogs', 'Hogs', 'Dogs', 'Logs' fracs = [15, 30, 45, 10] explode = (0, 0.05, 0, 0) pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True) title('Raining Hogs and Dogs', bbox={'facecolor': '0.8', 'pad': 5}) show() # Actually, don't show, just save to foo.png 我不想将图形显示在GUI上,而是要将图形保存到文件(例如foo.png)中,以便可以在批处理脚本中使用它。 我怎么做? 回答1 在回答问题后,我想在使用matplotlib.pyplot.savefig时添加一些有用的提示。
  • 如何删除matplotlib.pyplot中子图之间的空间?(How to remove the space between subplots in matplotlib.pyplot?)
    问题 我正在一个项目中,我需要将10行和3列的绘图网格放在一起。 尽管我已经能够绘制和布置子图,但是如果没有空白,就无法生成一个不错的图,例如gridspec文档中的下面的空白。 我尝试了以下文章,但仍然无法完全消除空白,如示例图像中所示。 有人可以给我一些指导吗? 谢谢! Matplotlib不同大小的子图如何删除子图之间的“空白”空间? 这是我的形象: 下面是我的代码。 完整的脚本在GitHub上。 注意:images_2和images_fool都是形状为(1032,10)的平坦图像的numpy数组,而delta是形状(28,28)的图像数组。 def plot_im(array=None, ind=0): """A function to plot the image given a images matrix, type of the matrix: \ either original or fool, and the order of images in the matrix""" img_reshaped = array[ind, :].reshape((28, 28)) imgplot = plt.imshow(img_reshaped) # Output as a grid of 10 rows and 3 cols with first column being
  • 如何以png为背景进行绘制? [复制](How to plot with a png as background? [duplicate])
    问题 这个问题已经在这里有了答案: 将数据叠加到背景图像上(3个答案) 3年前关闭。 我绘制了一个300万点的图,并将其另存为PNG。 花了几个小时,我想避免重提所有问题。 如何生成以该PNG为背景的新绘图? 回答1 尝试这个: library(png) #Replace the directory and file information with your info ima <- readPNG("C:\\Documents and Settings\\Bill\\Data\\R\\Data\\Images\\sun.png") #Set up the plot area plot(1:2, type='n', main="Plotting Over an Image", xlab="x", ylab="y") #Get the plot information so the image will fill the plot box, and draw it lim <- par() rasterImage(ima, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4]) grid() lines(c(1, 1.2, 1.4, 1.6, 1.8, 2.0), c(1, 1.3, 1.7, 1.6, 1.7, 1.0), type="b"
  • 根据R中的一系列绘图制作电影(Creating a Movie from a Series of Plots in R [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 4年前关闭。 改善这个问题 是否有一种简单的方法可以通过在R内将多个绘图拼接在一起来创建“电影”? 回答1 这是我使用R help找到的一种方法: 要创建单个图像帧: jpeg("/tmp/foo%02d.jpg") for (i in 1:5) { my.plot(i) } dev.off() 要制作电影,请先安装ImageMagick。 然后调用以下函数(该函数称为“ convert”,我想是ImageMagick的一部分): make.mov <- function(){ unlink("plot.mpg") system("convert -delay 0.5 plot*.jpg plot.mpg") } 或尝试按照本文所述使用ffmpeg函数(我发现这提供了更清晰的结果):ffmpeg -r 25 -qscale 2 -i tmp / foo%02d.jpg output.mp4 可能需要进行一些修补,但是安装完所有组件后,这似乎非常简单。 当然,在任何看到“ jpg”或“ jpeg”的地方,都可以替换GIF或PNG以适合您的喜好。 回答2 看一下由Yihui Xie创建的动画程序包或EBImage生物导体程序包(动画)。 回答3