AmCharts双Y轴图表USD系列渲染异常问题求助
从你的描述和提供的信息来看,蓝色USD线条渲染异常的核心问题出在JSON数据格式和图表配置细节上,咱们一步步拆解:
1. JSON数据类型错误(最关键)
你提供的JSON里,Production和USD字段的值都是字符串类型(带引号),比如:
{"Day":"24-05 10H","Production":"0.82431267","USD":"482.02837415988"}
AmCharts绘制图表时需要数值类型的数据,字符串无法被正确解析为数值进行计算和渲染,这会直接导致线条出现异常波动或无法正常显示。
解决方法:
修改后端json.php的输出逻辑,把Production和USD的值转为数值类型(去掉引号),正确的JSON格式应该是:
{"Day":"24-05 10H","Production":0.82431267,"USD":482.02837415988}
2. 存在重复的Category字段值
检查你的JSON数据,发现Day字段有重复项(比如24-05 10H出现了两次):
{"Day":"24-05 10H","Production":"0.82431267","USD":"482.02837415988"}, ... {"Day":"24-05 10H","Production":"0.90740126","USD":"535.88759172324"},
AmCharts的Serial图表要求分类字段(这里是Day)的值必须唯一,重复值会打乱图表的渲染逻辑,引发线条错位、异常波动等问题。
解决方法:
清理JSON数据,确保每个Day的值唯一,比如检查是否是时间格式笔误,修正为正确的时间段。
3. 图表配置中的细节错误
(1)fillColorsField配置错误
你在柱状图的配置里写了:
"fillColorsField": "#B0DE09"
fillColorsField的作用是从JSON数据的某个字段读取颜色值,而不是直接写固定颜色。如果想给柱状图设置固定填充色,应该用fillColors而非fillColorsField:
"fillColors": "#B0DE09"
(2)双Y轴同步设置不合理
你设置了synchronizeWith: "v1"和synchronizationMultiplier: 5,但从数据来看,USD的数值大概是Production的500-600倍左右,设置5的乘数会导致USD轴的刻度范围被严重压缩,线条看起来异常扁平或扭曲。
解决方法:
要么去掉轴同步的设置,让两个轴自动计算合适的范围;要么根据实际数据比例调整synchronizationMultiplier(比如设置为600),或者手动指定轴的min/max值来适配数据。
修正后的完整配置示例
结合以上修改,调整后的图表配置如下:
<script> var chart = AmCharts.makeChart("chartdiv", { "type": "serial", "dataLoader": { "url": "http://x.x.x.x/json.php", "format": "json" }, "valueAxes": [ { "id": "v1", "startDuration": 1, "axisColor": "#FF6600", "axisThickness": 5, "gridAlpha": 0.1, "axisAlpha": 1 }, { "id": "v2", "axisColor": "#FCD202", "axisThickness": 5, "gridAlpha": 0, "axisAlpha": 1, "position": "right" // 去掉同步设置,让轴自动计算范围 } ], "graphs": [ { "valueAxis": "v1", "type": "column", "fillColors": "#B0DE09", // 修正为fillColors "balloonText": "[[category]]: <b>[[value]]</b>", "fillAlphas": 0.8, "lineAlpha": 0.2, "title": "Production Crypto", "valueField": "Production" }, { "valueAxis": "v2", "type": "smoothedLine", "lineColor": "#364cf2", "lineThickness": 3, "bulletBorderThickness": 1, "hideBulletsCount": 30, "title": "Production USD", "valueField": "USD", "fillAlphas": 0 } ], "chartCursor": { "categoryBalloonEnabled": false, "cursorAlpha": 0, "zoomable": false }, "categoryField": "Day", "categoryAxis": { "gridPosition": "start", "gridAlpha": 0, "tickPosition": "start", "tickLength": 20 } }); </script>
按照以上步骤修改后,应该就能正常渲染出双Y轴的图表了。
内容的提问来源于stack exchange,提问作者R_life_R

