我迷失在素食酱汁里了.我很难理解我哪里做错了.

我基本上需要两个层面:

  • 所有年份的线条(" colored颜色 ":)
  • 本年度(2023年)的一条红线
  • 要突出显示的标记:a)最高点,b)最低点,c)同一2023过滤行上的最新点-带有文本标签显示值(见下图)

enter image description here

我获得了部分成功,但感觉我的编码顺序或层错误.2023年的最低温度标记不遵守过滤器转换,并且文本标签受到" colored颜色 "编码的影响:而不是2023年标记的编码.

I've attached the pbix here: TemperatureDEV_pbix
(nb: this is a large dataset, I have toggled on the "override data limit" option)

为JSON的混乱提前道歉.对于最高分和最低分,我试着用"窗口":表情.在另一次try 中,我能够使用"argmax"获得结束标记:但我无法将结束标记和最高/最低分数组合在一起.

{
  "data": {"name": "dataset"},
  "encoding": {
    "x": {
      "field": "DayOfYear",
      "type": "temporal",
      "axis": {
        "labels": false,
        "ticks": false,
        "grid": false,
        "title": "Day Of Year"
      }
    },
    "y": {
      "field": "Temp",
      "type": "quantitative",
      "scale": {"zero": false},
      "title": "Temperature"
    },
    "color": {
      "legend": null,
      "field": "Year",
      "type": "quantitative",
      "scale": {
        "reverse": false,
        "range": [
          "#0041C2",
          "#0041C250",
          "#0041C230",
          "#4169E220",
          "#4863A015"
        ]
      }
    }
  },
  
  "layer": [
    
    {
      "mark": {
        "type": "line",
        "interpolate": "monotone",
        "strokeWidth": 1.5
      }
    },
    {
      "transform": [
        {
          "calculate": "(datum.Temp)",
          "as": "2023_temp"
        },
        {
          "filter": {
            "field": "Year",
            "oneOf": ["2023"]
          }
        }
      ],
      "encoding": {
        "x": {
          "field": "DayOfYear",
          "type": "temporal",
          "axis": {
            "labels": false,
            "ticks": false,
            "grid": false,
            "title": "Day Of Year"
          }
        },
        "y": {
          "field": "2023_temp",
          "type": "quantitative",
          "scale": {"zero": false},
          "title": "Temperature"
        }
      },
      "layer": [
        {
          "mark": {
            "type": "line",
            "interpolate": "monotone",
            "stroke": "crimson",
            "strokeWidth": 3
          },
          "encoding": {
            "y": {"field": "2023_temp"}
          }
        },
        {
          "mark": {
            "type": "text",
            "align": "left",
            "dx": 5,
            "size": 15,
            "fontWeight": "bold",
            "color": "red"
          },
          "encoding": {
            "x": {
              "aggregate": "max",
              "field": "DayOfYear"
            },
            "y": {
              "aggregate": {
                "argmax": "DayOfYear"
              },
              "field": "2023_temp"
            },
            "text": {
              "aggregate": {
                "argmax": "DayOfYear"
              },
              "field": "2023_temp",
              "format": ".3~s"
            }
          }
        }
      ]
    },
    {
      "transform": [
        {
          "window": [
            {"op": "rank", "as": "jeff"}
          ],
          "sort": [
            {
              "field": "Temp",
              "order": "descending"
            }
          ]
        },
        {"filter": "datum.jeff ==1"}
      ],
      "mark": {
        "type": "point",
        "shape": "triangle-down",
        "size": 200,
        "yOffset": -8,
        "fill": "red",
        "opacity": 1
      },
      "encoding": {
        "x": {"field": "DayOfYear"},
        "y": {"field": "Temp"}
      }
    },
    {
      "transform": [
        {
          "window": [
            {
              "op": "rank",
              "as": "tempRank"
            }
          ],
          "sort": [
            {
              "field": "Temp",
              "order": "ascending"
            }
          ]
        },
        {
          "filter": "datum.tempRank == 1"
        }
      ],
      "mark": {
        "type": "point",
        "shape": "circle",
        "size": 200,
        "yOffset": -8,
        "fill": "red",
        "opacity": 1,
        "stroke": null
      },
      "encoding": {
        "x": {"field": "DayOfYear"},
        "y": {"field": "Temp"}
      }
    },
    {
      "layer": [
        {
          "transform": [
            {
              "calculate": "(datum.Temp)",
              "as": "1979_temp"
            },
            {
              "filter": "datum.Year == '1979'"
            }
          ],
          "mark": {
            "type": "line",
            "interpolate": "monotone",
            "stroke": "orange",
            "strokeWidth": 3
          },
          "encoding": {
            "y": {"field": "1979_temp"}
          }
        }
      ]
    }
  ]
}

推荐答案

这个怎么样

enter image description here

{
  "data": {"name": "dataset"},
  "encoding": {
    "x": {
      "field": "DayOfYear",
      "type": "temporal",
      "axis": {
        "labels": false,
        "ticks": false,
        "grid": false,
        "title": "Day Of Year"
      }
    },
    "y": {
      "field": "Temp",
      "type": "quantitative",
      "scale": {"zero": false},
      "title": "Temperature"
    },
    "color": {
      "legend": null,
      "field": "Year",
      "type": "quantitative",
      "scale": {
        "reverse": false,
        "range": [
          "#0041C2",
          "#0041C250",
          "#0041C230",
          "#4169E220",
          "#4863A015"
        ]
      }
    }
  },
  "layer": [
    {
      "mark": {
        "type": "line",
        "interpolate": "monotone",
        "strokeWidth": 1.5
      }
    },
    {
      "transform": [
        {
          "calculate": "(datum.Temp)",
          "as": "2023_temp"
        },
        {
          "filter": {
            "field": "Year",
            "oneOf": ["2023"]
          }
        }
      ],
      "encoding": {
        "x": {
          "field": "DayOfYear",
          "type": "temporal",
          "axis": {
            "labels": false,
            "ticks": false,
            "grid": false,
            "title": "Day Of Year"
          }
        },
        "y": {
          "field": "2023_temp",
          "type": "quantitative",
          "scale": {"zero": false},
          "title": "Temperature"
        }
      },
      "mark": {
        "type": "line",
        "interpolate": "monotone",
        "stroke": "crimson",
        "strokeWidth": 3
      }
    },
    {
      "transform": [
        {
          "filter": {
            "field": "Year",
            "oneOf": ["2023"]
          }
        },
        {
          "window": [
            {"op": "rank", "as": "high"}
          ],
          "sort": [
            {
              "field": "Temp",
              "order": "descending"
            }
          ]
        },
        {
          "window": [
            {"op": "rank", "as": "low"}
          ],
          "sort": [
            {
              "field": "Temp",
              "order": "ascending"
            }
          ]
        },
        {
          "window": [
            {"op": "rank", "as": "last"}
          ],
          "sort": [
            {
              "field": "Year",
              "order": "ascending"
            },
            {
              "field": "DayOfYear",
              "order": "descending"
            }
          ]
        }
      ],
      "layer": [
              {
          "mark": {
            "type": "text",
            
            "fontSize": {"expr": "datum.high ==1 || datum.low==1|| datum.last==1?10:0"
            },
            "dy":-25,
            "fill": "black",
            "yOffset": 0,
            "opacity": 1
          },
          "encoding": {
      "text": {"field": "Temp", "type": "quantitative"}
    }
        },
        {
          "mark": {
            "type": "point",
            "shape": "circle",
            "size": {
              "expr": "datum.high ==1 || datum.low==1|| datum.last==1?150:0"
            },
            "yOffset": 0,
            "strokeWidth": 0.8,
            "stroke": "black",
            "fill": "red",
            "opacity": 1
          }
        }
      ]
    },
    {
      "layer": [
        {
          "transform": [
            {
              "calculate": "(datum.Temp)",
              "as": "1979_temp"
            },
            {
              "filter": "datum.Year == '1979'"
            }
          ],
          "mark": {
            "type": "line",
            "interpolate": "monotone",
            "stroke": "orange",
            "strokeWidth": 3
          },
          "encoding": {
            "y": {"field": "1979_temp"}
          }
        }
      ]
    }
  ]
}

Json相关问答推荐

由于无效的UTF-8开始字节0xa0,JSON被拒绝,但编码似乎有效

使用JQ在数组中 Select 第一个具有匹配项的项

使用JQ将JSON输出转换为CSV复杂 struct

使用JQ合并JSON列表中的对象

展平多个数组以保持顺序

go 语言中的 JSON 到 XML

使用动态语言jQuery:根据匹配模式提取与其他值匹配的值

如何使用 jq 将字符串数组转换为对象?

小写嵌套特定键的震动转换

使用 SwiftUI 在 API 调用中解码嵌套 JSON 响应时遇到问题

使用 c# 通用地展平 Json

谷歌浏览器不允许我放置断点

了解 JSON Schema 草稿版本 4 中的additionalProperties关键字

使用 jq,将对象数组转换为具有命名键的对象

如何在已声明的 JSON 对象中添加键值对

如何使用 Newtonsoft.Json 包在 C#(4.0) 中解析我的 json 字符串?

Gson 将一组数据对象转换为 json - Android

如何从 JSON 响应中提取单个值?

如何从 MVC 控制器返回 Json 对象以查看

类型是接口或抽象类,不能实例化