当绘制多个数据集时,如何在ListPlot中设置点的颜色?

4

在Windows上的8.04版本。

我注意到当我有两个数据集并在它们上使用ListPlot时,当使用Joined->True时,显示的点不遵循由PlotStyle设置的线条颜色本身的颜色。

我只是想看看这里的PlotStyle的含义是否有误解。

以下是一个示例:

data1 = {{1, 1}, {2, 1.5}, {3, 2}};
data2 = {{1, 1.5}, {2, 2.5}, {3, 3}};
ListPlot[{data1, data2}, PlotStyle -> {Red, Blue}, Joined -> False, 
 Mesh -> All, AxesOrigin -> {0, 0}]

enter image description here

请注意,根据 PlotStyle(先红色,然后蓝色)正确设置了点的颜色。

现在当我添加 Joined->True 时,看看会发生什么:

data1 = {{1, 1}, {2, 1.5}, {3, 2}};
data2 = {{1, 1.5}, {2, 2.5}, {3, 3}};
ListPlot[{data1, data2}, PlotStyle -> {Red, Blue}, Joined -> True, 
 Mesh -> All, AxesOrigin -> {0, 0}]

enter image description here

现在顶部蓝色线上的已经变成了底部红色线的颜色!

这有意义吗?

一种克服这个问题的方法是通过显式添加PlotMarkers来给点着色,就像这样:

data1 = {{1, 1}, {2, 1.5}, {3, 2}};
data2 = {{1, 1.5}, {2, 2.5}, {3, 3}};
ListPlot[{data1, data2}, PlotStyle -> {Red, Blue}, Joined -> True, 
 Mesh -> All, AxesOrigin -> {0, 0}, 
 PlotMarkers -> {{Graphics[{Red, Point[{0, 0}]}], 
    12}, {Graphics[{Blue, Point[{0, 0}]}], 12}}]

问题:为什么顶部行中的点会变成红色(如上面的第二个图)?是否有比我上面所做的更简单的解决方案?
编辑(1)
尝试使用`MeshStyle -> {Red, Blue}`似乎也会混淆事情:
data1 = {{1, 1}, {2, 1.5}, {3, 2}};
data2 = {{1, 1.5}, {2, 2.5}, {3, 3}};
ListPlot[{data1, data2}, PlotStyle -> {Red, Blue}, Joined -> True, 
 AxesOrigin -> {0, 0}, Mesh -> All, MeshStyle -> {Red, Blue}]

这里输入图像描述

谢谢


这不是答案,而是解释:网格具有单独的样式。尝试在你的图中添加 MeshStyle -> Green,看看会发生什么。我不知道如何使用数据系列相关的网格点样式。 - kkm
谢谢。我尝试了MeshStyle->{Red,Blue},但没有帮助。请参见编辑(1)中的屏幕截图。 - Nasser
1
正确,那将是无用的。所有样式都被应用,因此最后指定的颜色“获胜”。除非您的图形非常复杂,否则PlotMarkers是正确的选择。 - kkm
2个回答

4

我认为是Mesh->All的问题。您可以指定MeshStyle,或者将其省略并设置PlotMarkers->Automatic

ListPlot[{data1,data2},PlotStyle->{Red,Blue},Joined->True,
 PlotMarkers->Automatic,AxesOrigin->{0,0}]

Mathematica graphics


谢谢。这似乎是一个不错的解决方法。我使用了 Mesh->All,因为在帮助文档中有一个例子使用它来同时显示点和线(Joined->True)。 - Nasser
1
自版本6开始,您可以使用ListLinePlot而不是JoinedPlotJoined - Mr.Wizard
@Mr.Wizard,ListLinePlotListPlot[data,Joined->True]有什么区别? - Eli Lansey
就我记得来说,它们是等价的,但我发现 ListLinePlot 更加清晰,除非我想要来回切换。 - Mr.Wizard

0

要获得简单的有色点,而不改变它们的形状,并且不在代码中重复线条的颜色,您可以像这样使用PlotMarkers

ListPlot[{data1, data2}, PlotStyle -> {Red, Blue}, Joined -> True, 
 PlotMarkers -> Graphics@{Point[{0, 0}]}, AxesOrigin -> {0, 0}]

output of the above command


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接