简体   繁体   中英

Bar Chart in Altair: ValueError: Faceted charts cannot be layered

Does anyone have suggestions to avoid the error?

ValueError: Faceted charts cannot be layered.

With this Pandas Dataframe

|  Lab  |    FieldName               |MissingItemCnt    |     WorkItemCnt       |PercentMissing|    
| ----- |    ------------------      |------------------|   ------------------  | ----------   |    
|PQR LAB|                      MC ADO|               0  |                 1     |   0.00       |
|PQR LAB|                     MC Link|               0  |                 1     |   0.00       |
|PQR LAB|     HW Received or Expected|               1  |                 1     |   100.00     |
|PQR LAB|        Requested Start Date|               0  |                 1     |   0.00       |
|PQR LAB|          Requested End Date|               0  |                 1     |   0.00       |
|PQR LAB|         Targeted Start Date|               0  |                 1     |   0.00       |
|PQR LAB|           Targeted End Date|               0  |                 1     |   0.00       |
|PQR LAB|          Projected End Date|               0  |                 1     |   0.00       |
|PQR LAB|           Actual Start Date|               1  |                 1     |   100.00     |
|PQR LAB|             Actual End Date|               1  |                 1     |   100.00     |
|PQR LAB|                Signoff Date|               1  |                 1     |   100.00     |
|PQR LAB|                Duration End|               1  |                 1     |   100.00     |
|PQR LAB|            Duration SignOff|               1  |                 1     |   100.00     |
|PQR LAB|            HW Recieved Date|               1  |                 1     |   100.00     |
|PQR LAB|                        Tags|               0  |                 1     |   0.00       |
|RED LAB|                      MC ADO|               13 |                 137   |   9.49       |
|RED LAB|                     MC Link|               13 |                 137   |   9.49       |
|RED LAB|     HW Received or Expected|               18 |                 137   |   13.14      |
|RED LAB|        Requested Start Date|               3  |                 137   |   2.19       |
|RED LAB|          Requested End Date|               4  |                 137   |   2.92       |
|RED LAB|         Targeted Start Date|               6  |                 137   |   4.38       |
|RED LAB|           Targeted End Date|               7  |                 137   |   5.11       |
|RED LAB|          Projected End Date|               113|                 137   |   82.48      |
|RED LAB|           Actual Start Date|               20 |                 137   |   14.60      |
|RED LAB|             Actual End Date|               25 |                 137   |   18.25      |
|RED LAB|                Signoff Date|               28 |                 137   |   20.44      |
|RED LAB|                Duration End|               25 |                 137   |   18.25      |
|RED LAB|            Duration SignOff|               28 |                 137   |   20.44      |
|RED LAB|            HW Recieved Date|               32 |                 137   |   23.36      |
|RED LAB|                        Tags|               89 |                 137   |   64.96      |
                                                     

I do a bar chart of the percentages, including text on the bars with this code:

bars =  alt.Chart(outer_join_df).mark_bar().encode(
    #x='PercentMissing:Q',
    #alt.X('PercentOfTotal:Q', axis=alt.Axis(format='.0%')),
    alt.Y('PercentMissing:Q'),
    x='Lab Location:O',
    color='Lab Location:N',
    column='FieldName:N'
)

text = bars.mark_text(
    align='left',
    baseline='middle',
    dx=3  # Nudges text to right so it doesn't appear on top of the bar
).encode(
    text='PercentMissing:Q'
)
(bars + text).properties(height=900)

What makes a chart faceted and how can I avoid this error?

A faceted chart is one where you use column , row , or .facet to create multiple subplots of your data. See the docs for more details . In your specific case, you can try to layer first and then facet:

bars =  alt.Chart(outer_join_df).mark_bar().encode(
    alt.Y('PercentMissing:Q'),
    x='Lab Location:O',
    color='Lab Location:N',
)

text = bars.mark_text(
    align='left',
    baseline='middle',
    dx=3  # Nudges text to right so it doesn't appear on top of the bar
).encode(
    text='PercentMissing:Q'
)

(bars + text).properties(height=900).facet(column='FieldName:N')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM