【问题标题】:ggplot2 error - 'Discrete value supplied to continuous scale'ggplot2 错误 - '提供给连续刻度的离散值'
【发布时间】:2014-07-06 14:02:34
【问题描述】:

我正在尝试使用以下代码绘制填充矩形 -

tplot.old <- ggplot() + 
geom_rect(data=t.df,mapping=aes(xmin=xa, xmax=xb, ymin=ya, ymax=yb, fill=Train)) +
ylab("Cars per week") + xlab("Miles") + ggtitle(old.title) +
theme(axis.text.x = element_text(angle=45,size=5,hjust=1), axis.text=element_text(size=5), axis.text.y = element_text(size=5), title=element_text(size=5), legend.text=element_text(size=5)) + 
scale_fill_manual(values=color_values) + 
scale_x_continuous(breaks=plot.stns$Avg_Miles,labels=plot.stns[,"City_Name"]) + 
coord_cartesian(xlim=c(0,1700),ylim=c(0,500))

t.df 看起来像这样:

   Train  xa   xb ya        yb       col
a  MHKNP 407 1594  0 22.806452       red
b  MPDNP 407 1594  0  9.258065 darkgreen
cd MHKRO 407 1594  0  5.258065    orange

plot.stns:

      Avg_Miles       City_Name
1           0          EUGENE
4          15    BLAKESLEEJCT
12         64     LONGVIEWJCT
25        118          ALBINA
45        306          HINKLE

当我在控制台上以交互方式绘制时,这似乎有效,但在 for 循环中会出现此错误 -

错误:提供给连续刻度的离散值

颜色值:

     MHKNP      MHKNPB       MHKPC       MHKRO       MPCGR       MPSHK 
     "red"     "green"      "blue"    "maroon"    "orange"     "black" 
     QCONP      QPCNPP       MPDNP 
   "magenta"   "skyblue" "darkgreen" 

这在某种程度上与scale_x_continuous 相关(当我删除它时它不会给出错误),但我无法弄清楚这里有什么问题。有什么想法吗?

【问题讨论】:

  • 你还没有发布循环。在您使用时发布一些数据。该语法如何不会给您带来错误?您应该在图层末尾保留+s,以便添加更多
  • @rawr 更正了格式。循环只是在每次迭代中创建 t.df。已经发布了我在这里使用的几个数据框。您缺少哪条数据?
  • 你看过你的 x 变量的类了吗?当它们不是数字或整数时,这就解释了为什么您会收到此错误消息。
  • 它们是“整数”类。甚至尝试将其转换为数字 - 不起作用。
  • color_values 对象在哪里?

标签: r plot ggplot2


【解决方案1】:

我在您的两个部分数据帧上执行了read.table(pipe("pbpaste"))(我在 Mac 上)并适度重组了您的代码。如果数据框列类型与您的不同,也许粘贴dput vs ascii 表格输出。

但是,我没有收到与您相同的错误:

t.df <- structure(list(Train = structure(c(1L, 3L, 2L), .Label = c("MHKNP", 
                  "MHKRO", "MPDNP"), class = "factor"), xa = c(407L, 407L, 407L
                  ), xb = c(1594L, 1594L, 1594L), ya = c(0L, 0L, 0L), yb = c(22.806452, 
                  9.258065, 5.258065), col = structure(c(3L, 1L, 2L), .Label = c("darkgreen", 
                  "orange", "red"), class = "factor")), .Names = c("Train", "xa", 
                  "xb", "ya", "yb", "col"), class = "data.frame", row.names = c("a", 
                  "b", "cd"))

plot.stns <- structure(list(Avg_Miles = c(0L, 15L, 64L, 118L, 306L), City_Name = structure(c(3L, 
                        2L, 5L, 1L, 4L), .Label = c("ALBINA", "BLAKESLEEJCT", "EUGENE", 
                        "HINKLE", "LONGVIEWJCT"), class = "factor")), .Names = c("Avg_Miles", 
                        "City_Name"), class = "data.frame", row.names = c("1", "4", "12", 
                        "25", "45"))

color_values = t.df$col

gg <- ggplot(data=t.df, mapping=aes(xmin=xa, xmax=xb, ymin=ya, ymax=yb, fill=Train))
gg <- gg + geom_rect()
gg <- gg + labs(y="Cars per week", x="Miles", title="(old.title)")
gg <- gg + scale_fill_manual(values=color_values) 
gg <- gg + scale_x_continuous(breaks=plot.stns$Avg_Miles,
                              labels=plot.stns[,"City_Name"]) 
gg <- gg + coord_cartesian(xlim=c(0, 1700), ylim=c(0,500))
gg <- gg + theme(axis.text.x = element_text(angle=45, size=5, hjust=1), 
                 axis.text = element_text(size=5), 
                 axis.text.y = element_text(size=5), 
                 title = element_text(size=5),
                 legend.text = element_text(size=5))
gg

"old.title" 不见了,所以我只是把它变成了一个文本字符串。我还发现以这种方式构建 ggplot 代码可以更轻松地重新排列、修改和调试。

【讨论】:

  • 您发布的数字几乎就是我想要创建的,所以让我试试这个。谢谢
  • 啊,愚蠢的错误,t.df 中的 xa、xb 是字符串!我的原始代码在转换为数字后有效。
  • 我有一种感觉(如答案所示:-)数据类可能是问题所在。很高兴它正在工作!
猜你喜欢
  • 2016-07-26
  • 2019-01-04
  • 1970-01-01
  • 2015-01-08
  • 2023-01-31
  • 2015-09-26
  • 1970-01-01
  • 2020-11-10
  • 2014-11-14
相关资源
最近更新 更多