v-jh
v-jh

Reputation: 76

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?

Upvotes: 3

Views: 1093

Answers (1)

joelostblom
joelostblom

Reputation: 49064

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')

Upvotes: 2

Related Questions