Apache ECharts can be configured inline using the "value" facet.
<h:form>
    <p:messages id="messages" showSummary="false" showDetail="true">
        <p:autoUpdate/>
    </p:messages>
    <div class="card">
        <h5>Facet</h5>
        <pe:echart style="width: 50vw; height: 400px;" widgetVar="facetEChart">
            <p:autoUpdate on="eventTheme"/>
            <p:ajax event="itemSelect" listener="#{eChartController.itemSelect}"/>
            <f:facet name="value">
                {
                series: [
                {
                type: 'gauge',
                startAngle: 180,
                endAngle: 0,
                center: ['50%', '75%'],
                radius: '90%',
                min: 0,
                max: 1,
                splitNumber: 8,
                axisLine: {
                lineStyle: {
                width: 6,
                color: [
                [0.25, '#FF6E76'],
                [0.5, '#FDDD60'],
                [0.75, '#58D9F9'],
                [1, '#7CFFB2']
                ]
                }
                },
                pointer: {
                icon: 'path://M12.8,0.7l12,40.1H0.7L12.8,0.7z',
                length: '12%',
                width: 20,
                offsetCenter: [0, '-60%'],
                itemStyle: {
                color: 'auto'
                }
                },
                axisTick: {
                length: 12,
                lineStyle: {
                color: 'auto',
                width: 2
                }
                },
                splitLine: {
                length: 20,
                lineStyle: {
                color: 'auto',
                width: 5
                }
                },
                axisLabel: {
                color: '#464646',
                fontSize: 20,
                distance: -60,
                rotate: 'tangential',
                formatter: function (value) {
                if (value === 0.875) {
                return 'Grade A';
                } else if (value === 0.625) {
                return 'Grade B';
                } else if (value === 0.375) {
                return 'Grade C';
                } else if (value === 0.125) {
                return 'Grade D';
                }
                return '';
                }
                },
                title: {
                offsetCenter: [0, '-10%'],
                fontSize: 20
                },
                detail: {
                fontSize: 30,
                offsetCenter: [0, '-35%'],
                valueAnimation: true,
                formatter: function (value) {
                return Math.round(value * 100) + '';
                },
                color: 'inherit'
                },
                data: [
                {
                value: 0.7,
                name: 'Grade Rating'
                }
                ]
                }
                ]
                }
            </f:facet>
        </pe:echart>
    </div>
</h:form>
package org.primefaces.showcase.view.chartjs;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.RequestScoped;
import jakarta.faces.application.FacesMessage;
import jakarta.faces.context.FacesContext;
import jakarta.inject.Named;
import java.io.Serial;
import java.io.Serializable;
import org.primefaces.extensions.event.EChartEvent;
@Named
@RequestScoped
public class EChartController implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    private String json;
    @PostConstruct
    public void init() {
        createJsonModel();
    }
    public void createJsonModel() {
        json = "{\n" +
                "    \"title\": {\n" +
                "        \"text\": \"Apache ECharts Line Chart\"\n" +
                "    },\n" +
                "    \"xAxis\": {\n" +
                "        \"type\": \"category\",\n" +
                "        \"data\": [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"]\n" +
                "    },\n" +
                "    \"yAxis\": {\n" +
                "        \"type\": \"value\"\n" +
                "    },\n" +
                "    \"series\": [\n" +
                "        {\n" +
                "            \"name\": \"Some data\",\n" +
                "            \"data\": [150, 230, 224, 218, 135, 147, 260],\n" +
                "            \"type\": \"line\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\": \"Other data\",\n" +
                "            \"data\": [110, 260, 124, 118, 235, 100, 200],\n" +
                "            \"type\": \"line\"\n" +
                "        }\n" +
                "    ],\n" +
                "    \"legend\": {},\n" +
                "    \"dataZoom\": [\n" +
                "        {\n" +
                "            \"type\": \"slider\"\n" +
                "        }\n" +
                "    ]\n" +
                "}";
    }
    public void itemSelect(EChartEvent event) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        String message = "Clicked " + event.getName()
                + ", series index " + event.getSeriesIndex()
                + ", data index " + event.getDataIndex()
                + ", value " + event.getData();
        FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_INFO, message, null);
        facesContext.addMessage(null, facesMessage);
    }
    public String getJson() {
        return json;
    }
    public void setJson(String json) {
        this.json = json;
    }
}