1

我需要创建一个生成的基于 png 的图表文件,其中带有带有数值的绘图标签,如下例所示。我在 Coldfusion 10 上,所以这是使用更新的 ZingChart 引擎。您看到的示例是由ZingChart Builder 制作的。

在此处输入图像描述

顺便说一句,我可以将基本图表绘制到 png 文件并检索它,然后查看它!我可以把我的 X 和 Y 东西弄好。我可以让我的系列以图例的形式呈现,我可以做基本的定位工作,我可以做不同的图表类型。我似乎无法对 json 覆盖的东西做任何事情,尤其是绘图栏标签。

我提供的代码来自我从互联网上搜索的一个示例以进行测试......但它应该很好地失败(就像我一整天一样)。

<cfscript>
    legend = {
        "width":150,
        "height":25,
        "position":"100% 0%",
        "margin-top":10,
        "margin-right":10,
        "margin-left":10,
        "margin-bottom":10,
        "layout":"x2",
        "alpha":0.5,
        "background-color":"##99cc66",
        "background-color-2":"##99cc66",
        "border-color":"##000000",
        "border-width":1,
        "shadow":true,
        "shadow-alpha":1,
        "shadow-color":"##000000",
        "shadow-distance":2,
        "shadow-blur-x":1,
        "shadow-blur-y":1,
        "draggable":false,
        "minimize":false
    };
    type ="bar";
    plot = {
        "value-box":{
            "type":"all",
            "text":"%v",
            "text-align":"center",
            "alpha":0.5,
            "background-color":"##99cc66",
            "background-color-2":"##99cc66",
            "border-color":"##000000",
            "border-width":1
        }
    };
</cfscript>
<cfchart
legend="#legend#"
plot="#plot#"
type="#type#"
showlegend="true"
height="300"
width="1300" 
title="Super fun time!" 
format="png" 
name="moreComplexThanChineseArithmetic">
    <cfchartseries seriescolor="red" seriesLabel="SeriesA"  >
        <cfloop from="1" to="10" index="i">
            <cfchartdata item="" value="#randRange( 5, 100 )#">
        </cfloop>
    </cfchartseries>
    <cfchartseries seriescolor="green"  seriesLabel="SeriesB"  >
        <cfloop from="1" to="10" index="i">
        <cfchartdata item="" value="#randRange( 5, 100 )#">
        </cfloop>
    </cfchartseries>
    <cfchartseries seriescolor="blue" seriesLabel="SeriesC" >
        <cfloop from="1" to="10" index="i">
        <cfchartdata item="" value="#randRange( 5, 100 )#">
        </cfloop>
    </cfchartseries>
</cfchart>
<cfset savedFile = getTempFile("/dynamic/coldfusion/temp/", "moreComplexThanChineseArithmetic") & ".png" />
<cfset fileWrite(savedFile, moreComplexThanChineseArithmetic) />     
<img src="<cfoutput>#savedFile#</cfoutput>" />

我处于集群环境中,这些图表不提供 HTML,因此使用 png 解决方法。另外,我必须像图像一样拥有它,因为图像可以缩放,我可以导出为 PDF,它看起来正确,服务器渲染并拍摄到客户端,所以我几乎没有客户端延迟。

现在。#plot# 中有变量替换,等等......正如你在上面看到的(我没有看到我尝试过的“任何”json 东西工作(一整天)(有很多不同的方法/组合来制作一些东西)发生)。它要么失败并出错(因为我犯了一个错误),要么什么都不做(这太棒了)。

上面那个 json 的东西可能有问题,但我再次,我用新的 json 尝试覆盖了一个又一个的变化,内联 json 也是,简化了等等。

我认为应该发生的是 plot value:box text: v% 应该(通过童话般的魔法)将 chartdata value 参数中的任何值作为条形上方或下方的一个不错的数字返回(或者我希望如此),但是它什么也没做,所以我无法测试我的期望。

如果需要更多详细信息,请告诉我...

PS 和仅供参考:我不能处理其他图表包。

4

1 回答 1

2

好吧,您所要做的就是完全失败地上床睡觉,然后再战。

这是解决方案(它附在chartseries容器上)。>>>> datalabelstyle="value"

<cfchartseries 
    datalabelstyle="value" 
    type="bar" 
    seriescolor="blue" 
    seriesLabel="SeriesC" >
        <cfloop from="1" to="10" index="i">
        <cfchartdata item="" value="#randRange( 5, 100 )#">
        </cfloop>
</cfchartseries>

更重要的是。JSON 的东西只适用于format="html"......它不适用于format="png". format="png"不使用 zingcharts,它回退到 webcharts3D 引擎。Coldfusion 10 有两个图表引擎。我希望这可以帮助其他陷入这种怪异的人。此外,对于 Coldfusion 11,webcharts3d 可以工作。 有一个错误讨论,可以更清楚地说明该怎么做。

于 2015-02-17T16:02:36.187 回答