【问题标题】:How to change maker in scatter plot in Julia如何在 Julia 中更改散点图中的制造商
【发布时间】:2016-09-22 09:46:14
【问题描述】:

我想根据向量中的值更改 2D 散点图的标记样式,最终在两个轴上显示 3 个维度。以下是我想做的事情以及我尝试时遇到的错误。

x = rand(1:30,100)
y = rand(20:30,100)
MyMarker = [fill("o",50);fill("x",50)]
scatter(x,y,marker=MyMarker,alpha=0.5)

LoadError: PyError (:PyObject_Call) <type 'exceptions.ValueError'>
ValueError(u"Unrecognized marker style ['o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x']",)
  File "/home/lara/.julia/v0.4/Conda/deps/usr/lib/python2.7/site-packages/matplotlib/pyplot.py", line 3251, in scatter
    edgecolors=edgecolors, data=data, **kwargs)
  File "/home/lara/.julia/v0.4/Conda/deps/usr/lib/python2.7/site-packages/matplotlib/__init__.py", line 1812, in inner
    return func(ax, *args, **kwargs)
  File "/home/lara/.julia/v0.4/Conda/deps/usr/lib/python2.7/site-packages/matplotlib/axes/_axes.py", line 3877, in scatter
    marker_obj = mmarkers.MarkerStyle(marker)
  File "/home/lara/.julia/v0.4/Conda/deps/usr/lib/python2.7/site-packages/matplotlib/markers.py", line 171, in __init__
    self.set_marker(marker)
  File "/home/lara/.julia/v0.4/Conda/deps/usr/lib/python2.7/site-packages/matplotlib/markers.py", line 252, in set_marker
    ' {0}'.format(marker))

while loading In[91], in expression starting on line 1

 in getindex at /home/lara/.julia/v0.4/PyCall/src/PyCall.jl:228
 in pysequence_query at /home/lara/.julia/v0.4/PyCall/src/conversions.jl:717
 [inlined code] from /home/lara/.julia/v0.4/PyCall/src/conversions.jl:733
 in pytype_query at /home/lara/.julia/v0.4/PyCall/src/conversions.jl:762
 in convert at /home/lara/.julia/v0.4/PyCall/src/conversions.jl:782
 in pycall at /home/lara/.julia/v0.4/PyCall/src/PyCall.jl:363
 in call at /home/lara/.julia/v0.4/PyCall/src/PyCall.jl:372
 in close_queued_figs at /home/lara/.julia/v0.4/PyPlot/src/PyPlot.jl:401

我尝试了以下方法,但这两种方法都不是我想要做的,但它们足够接近,而且都不起作用。

using Plots
pyplot(size=(400,200), legend=false)  # set backend and set some session defaults
scatter(rand(30),m = ColorGradient([:red,:green,:blue]),zcolor = repmat([0,0.5,1],10))

using Plots
pyplot(size=(400,200), legend=false)  # set backend and set some session defaults
scatter(rand(30),
        m = ColorGradient([:red,:green,:blue]),  # colors are defined by a gradient
        zcolor = repmat([0,0.5,1],10) # sample from the gradient, cycling through: 0, 0.5, 1
       )

谁能告诉我如何让ma​​rker接受向量?

更新 我有一个解决方法,但我不喜欢这样做:将数据分成单独的集合,然后将它们绘制在相同的轴上:

PyPlot.plot(spacerdataActualSpacer[:Length],spacerdataActualSpacer[:Curvature],marker="x",".")
PyPlot.plot(spacerdataNoActualSpacer[:Length],spacerdataNoActualSpacer[:Curvature],marker="o",".")

【问题讨论】:

    标签: plot julia scatter


    【解决方案1】:

    您可以尝试几种不同的方法(我是 Plots 开发人员,所以我不能确定开箱即用的方法对您有用):

    scatter(rand(30), group = repmat(1:3,10), marker=:auto)
    scatter(rand(30), group = repmat(1:3,10), shape=[:+ :o :utri])
    scatter(rand(30), group = repmat(1:3,10), shape=[:+ :o :utri], layout=(3,1))
    

    如果您想要其中任何一个,请告诉我。老实说,我不完全确定我知道你理想的可视化会是什么样子。

    【讨论】:

    • 感谢您的建议。不幸的是,它们都不起作用。我的理想情节看起来像我上面给出的情节,但不需要为每种标记类型编写一行代码。我希望能够使用键指定标记类型。因此,例如我的数据可能是 X = 30 点、Y = 30 点和 MarkerStyle = 30 点,其中每个点都是我想用于绘图上相应 XY 点的标记样式。
    • 如果你不使用group,pyplot 并不容易传递形状列表。但是,我可能已经通过快速搜索找到了一个解决方案,并为此添加了一个问题:github.com/tbreloff/Plots.jl/issues/278。您还可以告诉我我提供的示例“不起作用”吗?试试Pkg.checkout("Plots","dev"),然后告诉我它是否有效?
    • 这是我所做的:Pkg.checkout("Plots","dev") INFO: Checking out Plots dev... INFO: Pulling Plots latest dev... LoadError: unknown package RecipesBase required通过在加载 In[3] 时绘制,在表达式中从第 1 行开始在 ./error.jl:21 中出现错误,在 ./pkg/query.jl:11 中解析在 ./pkg/entry.jl:404 中在 pkg/entry.jl:404 匿名解析在 pkg/entry.jl:198 在 pkg/git.jl:97 在交易 _checkout 在 pkg/entry.jl:190 在 pkg/entry.jl:205 结帐匿名在 pkg/dir.jl:31
    • 在 cd at file.jl:22 in cd at pkg/dir.jl:31 中继续出现错误消息
    • 当我只是尝试运行您建议的散点图的 3 行时,我收到 LoadError: PyError (:PyObject_Call) TypeError('scatter() 需要的错误在从第 1 行开始的表达式中加载 In[4] 时至少有 2 个参数(给定 2 个)',)
    猜你喜欢
    • 2022-01-23
    • 2019-06-23
    • 1970-01-01
    • 2017-02-18
    • 2016-01-08
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多