最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

r - Plot contours with differently spaced data - Stack Overflow

programmeradmin2浏览0评论

I'm trying to make a contour plot in ggplot using segmented data, where one block has a spacing between the X-axis elements ​of 2, while the next block has a spacing between the X-axis elements of 2.5. This causes ggplot to show a homogeneous carpet in the plot only in the first segment. Somehow it gets "fixed" in that segment and when it starts to plot the other one it shows empty spaces.

The dataframe look like:

> head(df_example,3)
    temp1 temp2  value
1  235.99  0.00 151069
2  235.99  0.01 151850
3  235.99  0.02 146958

Verify the gaps:

> unique(df_example$temp1)
 [1] 235.99 237.99 239.99 241.99 243.99 245.99 247.99 249.99 252.49 254.99 257.49 259.99 262.49 264.99

> diff(unique(df_example$temp1))
 [1] 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.5 2.5 2.5 2.5 2.5 2.5

We can see that before 249.99 we have a difference of 2 between the elements, but afterwards this difference is 2.5. Any idea how to plot ignoring different spacing between elements?

> dput(df_example)

structure(list(temp1 = c(235.99, 235.99, 237.99, 237.99, 239.99, 
239.99, 241.99, 241.99, 243.99, 243.99, 245.99, 245.99, 247.99, 
247.99, 249.99, 249.99, 252.49, 252.49, 254.99, 254.99, 257.49, 
257.49, 259.99, 259.99, 262.49, 262.49, 264.99, 264.99, 252.49, 
252.49, 252.49, 254.99, 254.99, 254.99, 257.49, 257.49, 257.49, 
259.99, 259.99, 259.99, 262.49, 262.49, 262.49, 264.99, 264.99, 
264.99), temp2 = c(0, 0.01, 0, 0.01, 0, 0.01, 0, 0.01, 0, 0.01, 
0, 0.01, 0, 0.01, 0, 0.01, 0, 0.00999999999999091, 0, 0.00999999999999091, 
0, 0.00999999999999091, 0, 0.00999999999999091, 0, 0.00999999999999091, 
0, 0.00999999999999091, 0, 0.00999999999999091, 0.0200000000000102, 
0, 0.00999999999999091, 0.0200000000000102, 0, 0.00999999999999091, 
0.0200000000000102, 0, 0.00999999999999091, 0.0200000000000102, 
0, 0.00999999999999091, 0.0200000000000102, 0, 0.00999999999999091, 
0.0200000000000102), value = c(151069, 151850, 150899, 155987, 
148109, 155443, 153611, 159438, 153413, 158505, 144172, 147911, 
146392, 147019, 150317, 146777, 152075, 145706, 153543, 143011, 
149350, 140979, 151160, 143074, 155398, 148090, 149558, 147063, 
152075, 145706, 153090, 153543, 143011, 151019, 149350, 140979, 
150483, 151160, 143074, 143946, 155398, 148090, 153473, 149558, 
147063, 145317)), row.names = c(NA, -46L), class = "data.frame")

I tried:

ggplot2::ggplot(df_example, ggplot2::aes(x=temp1, y=temp2, fill=value)) +
  ggplot2::geom_tile() +
  ggplot2::scale_fill_viridis_c() +
  ggplot2::labs(x='temp 1',
                y= 'temp 2', fill= "value")+
  ggplot2::theme(plot.title=ggplot2::element_text(hjust=0.5))+
  ggplot2::scale_x_continuous(expand = c(0, 0)) +
  ggplot2::scale_y_continuous(expand = c(0, 0)) +
  ggplot2::guides(fill = ggplot2::guide_colorbar(ticks = FALSE))

I'm trying to make a contour plot in ggplot using segmented data, where one block has a spacing between the X-axis elements ​of 2, while the next block has a spacing between the X-axis elements of 2.5. This causes ggplot to show a homogeneous carpet in the plot only in the first segment. Somehow it gets "fixed" in that segment and when it starts to plot the other one it shows empty spaces.

The dataframe look like:

> head(df_example,3)
    temp1 temp2  value
1  235.99  0.00 151069
2  235.99  0.01 151850
3  235.99  0.02 146958

Verify the gaps:

> unique(df_example$temp1)
 [1] 235.99 237.99 239.99 241.99 243.99 245.99 247.99 249.99 252.49 254.99 257.49 259.99 262.49 264.99

> diff(unique(df_example$temp1))
 [1] 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.5 2.5 2.5 2.5 2.5 2.5

We can see that before 249.99 we have a difference of 2 between the elements, but afterwards this difference is 2.5. Any idea how to plot ignoring different spacing between elements?

> dput(df_example)

structure(list(temp1 = c(235.99, 235.99, 237.99, 237.99, 239.99, 
239.99, 241.99, 241.99, 243.99, 243.99, 245.99, 245.99, 247.99, 
247.99, 249.99, 249.99, 252.49, 252.49, 254.99, 254.99, 257.49, 
257.49, 259.99, 259.99, 262.49, 262.49, 264.99, 264.99, 252.49, 
252.49, 252.49, 254.99, 254.99, 254.99, 257.49, 257.49, 257.49, 
259.99, 259.99, 259.99, 262.49, 262.49, 262.49, 264.99, 264.99, 
264.99), temp2 = c(0, 0.01, 0, 0.01, 0, 0.01, 0, 0.01, 0, 0.01, 
0, 0.01, 0, 0.01, 0, 0.01, 0, 0.00999999999999091, 0, 0.00999999999999091, 
0, 0.00999999999999091, 0, 0.00999999999999091, 0, 0.00999999999999091, 
0, 0.00999999999999091, 0, 0.00999999999999091, 0.0200000000000102, 
0, 0.00999999999999091, 0.0200000000000102, 0, 0.00999999999999091, 
0.0200000000000102, 0, 0.00999999999999091, 0.0200000000000102, 
0, 0.00999999999999091, 0.0200000000000102, 0, 0.00999999999999091, 
0.0200000000000102), value = c(151069, 151850, 150899, 155987, 
148109, 155443, 153611, 159438, 153413, 158505, 144172, 147911, 
146392, 147019, 150317, 146777, 152075, 145706, 153543, 143011, 
149350, 140979, 151160, 143074, 155398, 148090, 149558, 147063, 
152075, 145706, 153090, 153543, 143011, 151019, 149350, 140979, 
150483, 151160, 143074, 143946, 155398, 148090, 153473, 149558, 
147063, 145317)), row.names = c(NA, -46L), class = "data.frame")

I tried:

ggplot2::ggplot(df_example, ggplot2::aes(x=temp1, y=temp2, fill=value)) +
  ggplot2::geom_tile() +
  ggplot2::scale_fill_viridis_c() +
  ggplot2::labs(x='temp 1',
                y= 'temp 2', fill= "value")+
  ggplot2::theme(plot.title=ggplot2::element_text(hjust=0.5))+
  ggplot2::scale_x_continuous(expand = c(0, 0)) +
  ggplot2::scale_y_continuous(expand = c(0, 0)) +
  ggplot2::guides(fill = ggplot2::guide_colorbar(ticks = FALSE))

Share Improve this question edited Feb 14 at 21:36 M-- 29.1k10 gold badges69 silver badges106 bronze badges Recognized by R Language Collective asked Feb 14 at 18:59 Pedro PereiraPedro Pereira 234 bronze badges 0
Add a comment  | 

1 Answer 1

Reset to default 1

Simply setting the width in geom_tile to the larger "gap" will take care of it. Here, I am also setting the color = "white" for demonstration purposes so each tile is clearly outlined.

ggplot(df_example, aes(x=temp1, y=temp2, fill=value)) +
  geom_tile(width = 2.5, color = "white") +
  scale_fill_viridis_c() +
  labs(x='temp 1',y= 'temp 2', fill= "value")+
  theme(plot.title=element_text(hjust=0.5))+
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0)) +
  guides(fill = guide_colorbar(ticks = FALSE))

发布评论

评论列表(0)

  1. 暂无评论